Ich habe eine einfache Szene (mit Storyboard in IB) mit einem Textfeld Benutzername und Passwort. Ich habe die Tastatur so eingestellt, dass sie sich schließt, wenn Sie sich im Kennwortfeld befinden, aber die nächste Schaltfläche (Zurück) kann nicht angezeigt werden, um den Benutzernamen zu ändern, um den Fokus (oder den Ersthelfer) auf das Kennwortfeld zu ändern.
Ich schließe die Tastatur, während Sie sich im Kennwortfeld wie folgt befinden:
- (BOOL)textFieldShouldReturn:(UITextField *)theTextField {
if (theTextField == self.textPassword) {
[theTextField resignFirstResponder];
}
return YES;
}
Ich weiß, dass es so ähnlich ist, aber ich kann es nicht festnageln.
Die Return-Taste hat in einem Textfeld standardmäßig nichts Besonderes. Sie müssen den Ersthelfer explizit ändern:
- (BOOL)textFieldShouldReturn:(UITextField *)theTextField {
if (theTextField == self.textPassword) {
[theTextField resignFirstResponder];
} else if (theTextField == self.textUsername) {
[self.textPassword becomeFirstResponder];
}
return YES;
}
Ich verwende diesen Code, mit dem ich das Formularverhalten im Storyboard steuern kann :
-(BOOL) textFieldShouldReturn:(UITextField *)textField{
if(textField.returnKeyType==UIReturnKeyNext) {
UIView *next = [[textField superview] viewWithTag:textField.tag+1];
[next becomeFirstResponder];
} else if (textField.returnKeyType==UIReturnKeyDone) {
[textField resignFirstResponder];
}
return YES;
}
Sie müssen lediglich den Auftragswert als tag
und returnkey
gemäß Next oder Done in jedem Eingabesteuerelement zuweisen.
für diejenigen, die Swift language verwenden möchten:
class MyClass: UIViewController, UITextFieldDelegate {
@IBOutlet weak var text1: UITextField!
@IBOutlet weak var text2: UITextField!
@IBOutlet weak var text3: UITextField!
override func viewDidLoad() {
super.viewDidLoad()
text1.delegate = self
text2.delegate = self
text3.delegate = self
}
//....
func textFieldShouldReturn(textField: UITextField) -> Bool{
if textField == self.text1 {
self.text2.becomeFirstResponder()
}else if textField == self.text2{
self.text3.becomeFirstResponder()
}else{
self.text1.becomeFirstResponder()
}
return true
}
//...
}
:-)
Sie müssen das UITextFieldDelegate in der Header-Datei hinzufügen .. _. Dann müssen Sie festlegen
theTextField.delegate = self;
in der viewDidLoad-Methode . Danach können Sie fortfahren
- (BOOL)textFieldShouldReturn:(UITextField *)theTextField {
if (theTextField == self.textPassword) {
[theTextField resignFirstResponder];
} else if (theTextField == self.textUsername) {
[self.textPassword becomeFirstResponder];
}
return YES;
}
Es gibt viele Lösungen für dieses Problem. Sehen Sie sich die Antworten zu dieser Frage an: Navigation in Textfeldern (Schaltflächen Next/Done) .
Weitere Informationen finden Sie in der UIResponder-Klassenreferenz .
Folgendes würdest du sagen:
- (BOOL)textFieldShouldReturn:(UITextField *)theTextField {
if (theTextField == self.textPassword) {
[theTextField resignFirstResponder];
} else if (theTextField == self.usernameField) {
[self.textPassword becomeFirstResponder];
}
return YES;
}
Hier ist eine Swift 2.0-Version von Rob Mayoff
func textFieldShouldReturn(textField: UITextField) -> Bool {
if textField == self.emailTextField {
self.passwordTextField.becomeFirstResponder()
}else{
self.passwordTextField.resignFirstResponder()
}
return false
}
Ich habe ein Problem, dass das Passwort-Textfeld den Fokus erhält und dann sofort den Fokus verliert. Zum Schluss habe ich festgestellt, dass wir besser NO in der Funktion textFieldShouldReturn: zurückgeben. Wenn wir YES zurückgeben, erhält das Textfeld einen insertText: -Aufruf. Dann wird es den Fokus verlieren. Den Grund nicht kennen.
Ich habe eine neue Frage für dieses Problem erstellt: UITextField erhalten den Fokus und verlieren sofort den Fokus, da in textFieldShouldReturn JA zurückgegeben wird
Wenn jemand den Grund kennt, lass es mich wissen. Vielen Dank.
- (BOOL)textFieldShouldReturn:(UITextField *)theTextField {
if (theTextField == self.textPassword) {
[theTextField resignFirstResponder];
} else if (theTextField == self.textUsername) {
[self.textPassword becomeFirstResponder];
}
// we'd better return NO here
return NO;
}
Sie können diese Unterklasse von UITextfield verwenden, um den UIReturnKey dynamisch gemäß der Text-/Zeichenfolge-Bedingung zu ändern, und führen Sie dann die Folgeaktion in dem textField-Delegat textFieldShouldReturn: (UITextField *) aus
if (textField.returnKeyType == UIReturnKeyNext)
https://github.com/codeinteractiveapps/OBReturnKeyTextField