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.
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];
quelle
Ich habe einen Fall entdeckt, in dem
endEditing
undresignFirstResponder
scheitern. Das hat in diesen Fällen bei mir funktioniert.ObjC
[[UIApplication sharedApplication] sendAction:@selector(resignFirstResponder) to:nil from:nil forEvent:nil]; [self setEditing:NO];
Schnell
UIApplication.shared.sendAction(#selector(resignFirstResponder), to: nil, from: nil, for: nil)
quelle
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!
quelle
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]; }
quelle
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];
quelle
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 :
quelle
als letztes Mittel 💩
let dummyTextView = UITextView(frame: .zero) view.addSubview(dummyTextView) dummyTextView.becomeFirstResponder() dummyTextView.resignFirstResponder() dummyTextView.removeFromSuperview()
quelle
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]);
quelle
Sie ersetzen nur durch
yourTextFieldName
, Sie haben es erraten! Ihr Textfeld. Dadurch wird die Tastatur geschlossen.[yourTextFieldName resignFirstResponder];
quelle
-(void)methodName { [textFieldName resignFirstResponder]; }
Rufen Sie diese Methode (methodName) mit didEndOnExit auf
quelle
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 }
quelle
-(void)textFieldDidBeginEditing:(UITextField *)textField { // your code [textField reloadInputViews]; }
quelle
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 derviewDidLoad
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 .
quelle
Richten Sie das Ereignis "Did End On Exit" in Xcode ein (klicken Sie mit der rechten Maustaste auf Ihr Textfeld).
Verwirklichen Sie diese Methode:
-(IBAction) closeKeyboard:(id) sender { [_txtField resignFirstResponder]; }
quelle