Keyboard ausblenden

bginner

Ingrid Marie
Registriert
13.12.09
Beiträge
266
Hallo zusammen,

also ich habe eine Anwendung fürs iPhone entwickelt in der es auch einen TextView gib.
wenn ich auf diesen TextView klicke erscheint auch die Tastatur aber ich bekomme die nicht mehr
weg. Dieser Return-Knopf geht irgendiwe nicht. Was muss ich da beachten?
Kann mir da jemand helfen?

Gruß bginner
 

marceo

Granny Smith
Registriert
06.07.09
Beiträge
17
Du musst im IB das Textfield-Delegate setzen und im der *.m folgende Methode hinzufügen:

- (BOOL)textFieldShouldReturnUITextField *)textField {
[textField resignFirstResponder];
return YES;
}
 

bginner

Ingrid Marie
Registriert
13.12.09
Beiträge
266
Also ich habe das TextField jetzt dem Files's Owner zugeordnet. Aber die Methode funktioniert irgendwie nicht. Da scheint irgendwo ne Klammer oder ein Doppelpunkt zu fehlen aber ich weiß nicht wo, jedenfalls spuckt der mir immer nen Fehler aus.
 

bginner

Ingrid Marie
Registriert
13.12.09
Beiträge
266
Wieso denn das und was meinst Du damit überhaupt?
Ich bin in den IB gegangen, habe auf diesen TextView geklickt. und dann den Punkt "Delegate" angeklickt und mit der Maus die daraufhin erschienene blaue Linie zum Files Owner gezogen. War das jetzt ausführlich genug?

Preisfrage: Wie sieht eine Fehlermeldung aus wenn in XCode eine Klammer fehlt?
Ungefähr so: error: expected '{' before '*' token.

Allerdings kann das ja nicht stimmen, wer weiß warum? und was mache ich falsch?

EDIT: Vielen Dank an ppocket, jetzt funktioniert es.
Allerdings gibt es eine Warnung: warning: local declaration of 'chosenIssue' hides instance variable
chosenIssue heißt mein TextField.

Geht das genau so mit einer TextView?

EDIT2: Die Warnung ist jetzt weg.

EDIT3: Wie krieg ich das hin das auch bei einem TextView das Keyboard weggeht?
Ich weiß das man das wieder mit resignFirstResponder machen muss aber mir fehlt die
Funktion wo das rein muss.
 
Zuletzt bearbeitet:

MacApple

Schöner von Bath
Registriert
05.01.04
Beiträge
3.652
Ich bin in den IB gegangen, habe auf diesen TextView geklickt. und dann den Punkt "Delegate" angeklickt und mit der Maus die daraufhin erschienene blaue Linie zum Files Owner gezogen. War das jetzt ausführlich genug?
Ausführlich genug, ja. Das ist auch etwas ganz anderes, als „ich habe das TextField jetzt dem Files's Owner zugeordnet“. Du hast den File's Owner zum Delegate des TextFields gemacht. ;)

MacApple
 

bginner

Ingrid Marie
Registriert
13.12.09
Beiträge
266
Ja das kann man so sagen aber das Problem habe ich ja bereits gelöst. Aber wie blende ich das Keyboard aus wenn ich in einen TextView klicke? Habe in der Klassenreferenz zum UITextView nur gelesen das ich das wieder mit resignFirstResponder machen muss, aber mir fehlt die Funktion in die ich das schreiben muss. Kann mir die jemand verraten oder zumindest sagen wo ich nachschauen kann?
 

Poljpocket

Salvatico di Campascio
Registriert
07.01.07
Beiträge
432
iPhone OS ist ja nicht mein Ding, aber kurzes Reinlesen in die Dokumentation sagt Folgendes:

UITextView > UIView > UIResponder > NSObject.

So sieht die Klassenhierarchie von UITextView aus (genau wie in Cocoa). Der UIResponder interessiert dich in diesem Vorhaben. Er ist darauf ausgelegt, Events zu Verarbeiten. Somit auch touches. Du findest dann dort folgende Methode:

Code:
- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event

Diese Methode wird aufgerufen, wenn ein oder mehrere touch(es) auf dem iPhone bzw. iPod touch gemacht werden.

Du überschreibst also diese Methode in deiner TextView-Subklasse und machst dort das resignFirstResponder, falls das TextView es schon ist. Fertig.

Gruss ppocket
 

Modern Geek

Ontario
Registriert
14.10.09
Beiträge
348
mach doch einfach ne Methode

-(IBAction)textFieldDone:(id)sender {
[sender resignFirstResponder];
}

und setze dem Textfield eine Verbindung auf "Did End on Exit"

Wenn du kein Done Button hast z.b. bei einer Telefonnummer etc. mach das ueber einen Unsichtbaren Button im Hintergrund und dann kann der User auch auf den Screen tappen und die Tastatur verschwindet.
 

bginner

Ingrid Marie
Registriert
13.12.09
Beiträge
266
Es geht immer noch nicht.

Ich habe folgendes implementiert:
Code:
- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event
{
  [comments resignFirstResponder];
}

Das zeigt keine Wirkung, also ich merke keine Veränderung. comments ist mein UITextView.
Im IB hab ich die notwendigen Verbindungen aber schon hergestellt.
Was fehlt denn jetzt noch?

Ich habe auch die UITextView Klassen-Reference studiert, aber keine Funktion bringt mir das gewünschte Ergebniss.

P.S.: Bitte etwas ausführlicher wenns euch keine Umstände macht, bin Neuling auf dem Gebiet. THX
 

bginner

Ingrid Marie
Registriert
13.12.09
Beiträge
266
@Modern Geek:
Hallo und erstmal danke für den Tipp:
aber du sprichst von einem TextField. ich meine aber einen TextView.

Was meinst du hiermit ?
mach doch einfach ne Methode
und setze dem Textfield eine Verbindung auf "Did End on Exit"

einfach die Methode DidEndOnExit in meine *.m einbinden und gut ist?
 

bginner

Ingrid Marie
Registriert
13.12.09
Beiträge
266
doch der soll schon edtierbar sein. ich will nur das keyboard ausblenden welches automatisch erscheint wenn ich in den TextView klicke.
 

Poljpocket

Salvatico di Campascio
Registriert
07.01.07
Beiträge
432
Es geht immer noch nicht.

Ich habe folgendes implementiert:

Wo genau hast du das implementiert? Es sieht danach aus, als ob du keine Subklasse - wie von mir erwähnt - gemacht hast... Das ist natürlich nötig dafür.

Gruss ppocket
 

Modern Geek

Ontario
Registriert
14.10.09
Beiträge
348
@bginner

schuldige hatte ich falsch gelesen bei der TextView geht das so nicht da musst du es ueber das delegate machen.
 

bginner

Ingrid Marie
Registriert
13.12.09
Beiträge
266
Habe es jetzt hinbekommen, auf YouTube gibts ein Video dazu, da zeigt es jemand mit einem TextField, das ganze muss man dann nur noch auf ein TextView übertragen und fertig. Man braucht aber einen seperaten button um das keyboard auszublenden.
 

Poljpocket

Salvatico di Campascio
Registriert
07.01.07
Beiträge
432
warum so kompliziert, wenn es auch so einfach geht... :S