Ich habe ein UITextfield, für das ich die Tastatur schließen möchte. Ich kann nicht scheinen, die Tastatur verschwinden zu lassen, egal welchen Code ich benutze.
Ich habe ein UITextfield, für das ich die Tastatur schließen möchte. Ich kann nicht scheinen, die Tastatur verschwinden zu lassen, egal welchen Code ich benutze.
Antworten:
[myTextField resignFirstResponder]
Hier der zweite Absatz im Abschnitt Ein- und Ausblenden der Tastatur.
Wenn Sie mehrere Textfelder haben und nicht wissen, welches der Ersthelfer ist (oder Sie einfach keinen Zugriff auf die Textfelder haben, von wo aus Sie diesen Code schreiben), können Sie endEditing:
die übergeordnete Ansicht mit den Textfeldern aufrufen .
In der Methode eines View Controllers würde dies folgendermaßen aussehen:
[self.view endEditing:YES];
Der Parameter zwingt das Textfeld, den Ersthelferstatus aufzugeben. Wenn Sie einen Delegaten zur Durchführung der Validierung verwendet haben und alles anhalten möchten, bis der Inhalt des Textfelds gültig ist, können Sie es auch folgendermaßen codieren:
BOOL didEndEditing = [self.view endEditing:NO];
if (didEndEditing) {
// on to the next thing...
} else {
// text field must have said to first responder status: "never wanna give you up, never wanna let you down"
}
Das endEditing:
Methode ist viel besser, als einzelne Textfelder zu informieren resignFirstResponder
, aber aus irgendeinem Grund habe ich bis vor kurzem noch nie davon erfahren.
Es gibt Fälle, in denen kein Textfeld der Ersthelfer ist aber die Tastatur auf dem Bildschirm angezeigt wird. In diesen Fällen können die oben genannten Methoden die Tastatur nicht schließen.
Ein Beispiel, wie man dorthin kommt:
In diesem Fall müssen Sie auch den View Controller bitten, den Bearbeitungsmodus zu verlassen:
[viewController setEditing:NO animated:YES];
Ich habe einen Fall entdeckt, in dem endEditing
undresignFirstResponder
scheitern. Das hat in diesen Fällen bei mir funktioniert.
[[UIApplication sharedApplication] sendAction:@selector(resignFirstResponder) to:nil from:nil forEvent:nil];
[self setEditing:NO];
UIApplication.shared.sendAction(#selector(resignFirstResponder), to: nil, from: nil, for: nil)
Ich schlage vor, dass Sie Ihre Header-Datei hinzufügen und bearbeiten:
-(IBAction)removeKeyboard;
Und schreiben Sie in der Implementierung so etwas:
-(IBAction)removeKeyboard
{
[self.textfield resignFirstResponder];
}
Stellen Sie in der NIB-Datei über die Option DidEndOnExit eine Verbindung von UITextFiled zum Eigentümer der Datei her. Auf diese Weise verschwindet die Tastatur, wenn Sie die Eingabetaste drücken.
Ich hoffe es hilft!
Stellen Sie in Ihrer View Controller YourViewController.h-Datei sicher, dass Sie das UITextFieldDelegate-Protokoll implementieren:
@interface YourViewController : <UITextFieldDelegate>
@end
Implementieren Sie dann in der Datei YourViewController.m die folgende Instanzmethode:
- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event {
[self.yourTextField1 resignFirstResponder];
[self.yourTextField2 resignFirstResponder];
...
[self.yourTextFieldn resignFirstResponder];
}
Dadurch wird ein bestimmtes Textfeld zurückgesetzt
// Swift
TextField.resignFirstResponder()
// Objective C
[TextField resignFirstResponder];
Um ein Textfeld zu verlassen, verwenden Sie den folgenden Code
// Swift
self.view!.endEditing(true)
// Objective C
[self.view endEditing:YES];
So geben Sie ein Textfeld in der App zurück
UIApplication.shared.keyWindow?.endEditing(true)
Dieser Ansatz ist sauber und funktioniert garantiert, da das keyWindow per Definition die Stammansicht aller möglichen Ansichten ist, in denen eine Tastatur ( Quelle ) angezeigt wird :
Das Tastenfenster empfängt Tastatur- und andere nicht berührungsbezogene Ereignisse. Es kann jeweils nur ein Fenster das Schlüsselfenster sein.
als letztes Mittel 💩
let dummyTextView = UITextView(frame: .zero)
view.addSubview(dummyTextView)
dummyTextView.becomeFirstResponder()
dummyTextView.resignFirstResponder()
dummyTextView.removeFromSuperview()
UITextField
Ersthelferin hatte, aber ein Popover mit Vorschlägen, die ebenfalls aktiv waren. Durch Schließen der Tastatur mit der Schaltfläche "Ausblenden" wurde die Tastatur nicht ausgeblendet. Dieser Code hat mir hier geholfen, danke! :)
Wenn Sie nicht wissen, welches textField der Ersthelfer ist, können Sie es finden. Ich benutze diese Funktion:
UIView *resignFirstResponder(UIView *theView)
{
if([theView isFirstResponder])
{
[theView resignFirstResponder];
return theView;
}
for(UIView *subview in theView.subviews)
{
UIView *result = resignFirstResponder(subview);
if(result) return result;
}
return nil;
}
Dann in Ihrem Code-Aufruf:
UIView *resigned = resignFirstResponder([UIScreen mainScreen]);
-(void)methodName
{
[textFieldName resignFirstResponder];
}
Rufen Sie diese Methode (methodName) mit didEndOnExit auf
Für Swift 3
Sie können die Tastatur folgendermaßen ausblenden:
textField.resignFirstResponder()
Wenn Sie die Tastatur ausblenden möchten, wenn der Benutzer die "Intro" -Taste drückt, müssen Sie die folgende UITextFieldDelegate
Methode implementieren :
func textFieldShouldReturn(_ textField: UITextField) -> Bool {
textField.resignFirstResponder()
return true
}
-(void)textFieldDidBeginEditing:(UITextField *)textField
{
// your code
[textField reloadInputViews];
}
3 einfache und schnelle Schritte
Fügen Sie UITextFieldDelegate
Ihrer Klasse wie folgt hinzu:
class RegisterVC: UIViewController, UITextFieldDelegate {
//class implementation
}
Fügen Sie in der Klassenimplementierung die Delegatenfunktion hinzu textFieldShouldEndEditing:
:
internal func textFieldShouldReturn(_ textField: UITextField) -> Bool {
self.view.endEditing(true)
return true
}
und als letzten Schritt setzen Sie Ihre UITextField
(n) Delegierte (n) an einem geeigneten Ort auf sich selbst. Zum Beispiel innerhalb der viewDidLoad
Funktion:
override func viewDidLoad(){
super.viewDidLoad()
myTextField1.delegate = self
myTextField2.delegate = self
..
..
}
Wenn der Benutzer die Eingabetaste drückt, wird die Tastatur geschlossen.
Ich bereitete auch ein Beispiel Schnipsel, können Sie es aus überprüfen hier .