2010-05-13 9 views
48

Dies ist wahrscheinlich eine dumme Frage, aber ich kann die Antwort in der Dokumentation nicht finden. Hat die Schaltfläche "Fertig" auf der Popup-Tastatur dazu geführt, dass die Tastatur immer verschwindet? Ich sehe eine Menge Code um das Netz wie folgt aus:iPhone-Tastatur, Fertig-Taste und ResignFirstResponder

- (BOOL)textFieldShouldReturn:(UITextField *)theTextField { 
    [theTextField resignFirstResponder]; 
    return YES; 
} 

Wenn ich die Schaltfläche „Fertig“ drücken, wird die Tastatur erscheint nach unten und der UITextField tritt zurück Ersthelfer.

Ich nehme an, dass das Drücken der Schaltfläche "Fertig" nicht UITextField bis resignFirstResponder verursacht, aber dieses Verhalten änderte sich irgendwann.

Ich bin Debuggen auf OS 3.0 - 3.1.3

+1

https://developer.apple.com/library/ios/#documentation/iphone/conceptual/iPhone101/Articles/05_ConfiguringView.html Siehe –

+1

Offenbar I don‘ Ich habe genug Rep, um der Antwort von Nevan King nur einen Kommentar hinzuzufügen, daher erwähne ich hier, dass es für seine Lösung nicht notwendig ist, die Klasse zu einem UITextFieldDelegate zu machen. Das UITextFieldDelegate-Protokoll definiert nur einige Nachrichten, die an den Delegaten gesendet werden, ob das Textfeld zurücktreten soll, ob es resigniert hat usw. Jedes Objekt kann Aktionen in der Art empfangen, wie seine Antwort implementiert wurde, indem einfach seine Methode in der Art definiert wird, wie er gemacht wurde mit textFieldFinished. –

Antwort

89

habe ich ein kleines Testprojekt mit nur einem UITextField und diesen Code

#import <UIKit/UIKit.h> 
@interface TextFieldTestViewController : UIViewController 
<UITextFieldDelegate> 
{ 
    UITextField *textField; 
} 
@property (nonatomic, retain) IBOutlet UITextField *textField; 
@end 

#import "TextFieldTestViewController.h" 
@implementation TextFieldTestViewController 
@synthesize textField; 

- (void)viewDidLoad 
{ 
    [self.textField setDelegate:self]; 
    [self.textField setReturnKeyType:UIReturnKeyDone]; 
    [self.textField addTarget:self 
        action:@selector(textFieldFinished:) 
     forControlEvents:UIControlEventEditingDidEndOnExit]; 
    [super viewDidLoad]; 
} 
- (IBAction)textFieldFinished:(id)sender 
{ 
    // [sender resignFirstResponder]; 
} 

- (void)dealloc { 
    [super dealloc]; 
} 
@end 

Das Textfeld ein unmodifiziertes UITextField auf das NIB gezogen wird, mit dem Auslass verbunden ist.
Nach dem Laden der App wird durch Klicken in das Textfeld die Tastatur aufgerufen. Wenn Sie auf die Schaltfläche "Fertig" klicken, verliert das Textfeld den Fokus und animiert die Tastatur. Beachten Sie, dass der Rat im Internet immer [sender resignFirstResponder] verwendet, aber das funktioniert ohne sie.

+0

Hmm. Und was ist addTarget: action: forControlEvents: für? Ist nicht gesetztDelegate: genug? Lass es mich selbst ausprobieren. – bealex

+0

Ja, genau. Wenn Sie addTarget: ... entfernen, geht alles gut. – bealex

+1

Für Noobs wie mich ist die Art, dies mit Interface Builder zu tun, das + von "Did End On Exit" auf den Besitzer der Datei zu ziehen und dann einer IBAction zuzuweisen, die nichts tut (textFieldFinished: (id) sender in diesem) Beispiel). Die Antwort ist oben ist richtig, wollte nur hinzufügen. –

6

Aus der Dokumentation (alle Versionen):

Es ist Ihrer Anwendung Verantwortung der Tastatur zum Zeitpunkt Ihrer Wahl zu entlassen . Sie könnte die Tastatur als Reaktion auf eine bestimmte Benutzeraktion wie die Benutzer abweisen eine bestimmte Schaltfläche in Benutzeroberfläche tippen. Sie könnten konfigurieren auch Ihr Textfeld Delegierten entlassen die Tastatur, wenn der Benutzer die „Return“ -Taste auf der Tastatur selbst drückt. Um die Tastatur zu entlassen, senden Sie die ResignFirstResponder Mitteilung an das Textfeld, das zur Zeit die ersten Responder sind. Dadurch verursacht so den Text Feldobjekt die aktuelle Bearbeitungssitzung (mit den Delegierten Objekt Zustimmung) und Ausblenden der Tastatur zu beenden.

Also, Sie müssen resignFirstResponder irgendwie senden. Es besteht jedoch die Möglichkeit, dass Textfeld während der Verarbeitung von textFieldShouldReturn: message den Fokus auf andere Weise verliert. Dies wird auch dazu führen, dass die Tastatur verschwindet.

+0

Danke für die Antwort. Ich habe den Teil gefunden, der das 'UITextField' veranlasst hat, als Ersthelfer zurückzutreten. Ich habe einen Anruf '\t [TextField addTarget: Selbst-Aktion: @Selector (TextFieldDone :) forControlEvents: UIControlEventEditingDidEndOnExit]'. Seltsamerweise ist die 'textFieldDone:' Methode leer (Ich habe den 'resignFirstResponder' Aufruf gelöscht). So kann ich immer noch nicht herausfinden, warum die Tastatur verschwindet. –

+0

Vielleicht verschieben Sie den Fokus implizit auf eine andere Komponente? Indem Sie beispielsweise einen Wert in einer Tabelle oder einem Label ändern? – bealex

+0

Ich glaube nicht, da ist noch etwas los. Ich habe ein kleines Projekt erstellt (den Code unten veröffentlicht) und es gibt das gleiche Verhalten. Nicht wirklich sicher, warum es passiert. –

2

Eine Zeile Code für Erledigt-Taste: -

[yourTextField setReturnKeyType:UIReturnKeyDone]; 

Und Aktionsmethode auf valuechanged von TextField- hinzufügen und fügen Sie diese

[yourTextField resignFirstResponder]; 
13

In Xcode 5 Leitungsausgangs-.1

Erledigt-Taste aktivieren

  • In Attribute Inspector für die UITextField in der Storyboard, das Feld "Return-Taste" und wählen Sie "Fertig"

ausblenden Tastatur finden, wenn sie gedrückt wird

Geschehen
  • Im Storyboard machen Sie Ihren ViewController zum Delegaten für das UITextField
  • diese Methode, um Ihre Viewcontroller hinzufügen

    -(BOOL)textFieldShouldReturn:(UITextField *)textField 
    { 
        [textField resignFirstResponder]; 
        return YES; 
    } 
    
Verwandte Themen