webentwicklung-frage-antwort-db.com.de

Fokusänderung für UITextField erkennen

Ich versuche, die Animation für die Ansicht so einzustellen, dass sie nach oben verschoben wird, wenn die Tastatur für die Textfelder ausgeblendet und angezeigt wird, und ich habe dafür gesorgt, dass sie einwandfrei funktioniert. Wenn sich der Fokus jedoch von einem Textfeld in ein anderes verschiebt, funktioniert dies nicht da wurde die tastatur schon angezeigt.

In viewDidLoad habe ich Folgendes registriert:

[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(keyboardWillShow:) name:UIKeyboardWillShowNotification object:nil];
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(keyboardWillHide:) name:UIKeyboardWillHideNotification object:nil];

anschließend wird in den Methoden keyboardWillShow und keyboardWillHide bestimmt, ob die Ansicht verschoben werden soll oder nicht, und entsprechend animiert. Wenn jedoch bereits eine Tastatur angezeigt wurde und der Benutzer auf ein anderes Textfeld klickt, für das die Ansicht nach oben verschoben werden muss, wird die Methode nicht aufgerufen. Gibt es eine Möglichkeit zu erkennen, ob ein Fokus in ein anderes Textfeld geändert wurde, als die Tastatur bereits angezeigt wurde? Es wäre großartig, wenn es eine Möglichkeit gäbe, dies zu tun, ohne alle Textfelder für Delegierte festlegen zu müssen.

Danke im Voraus.

34
Dennis

Verwenden Sie die UITextField Delegate-Methoden. Dies ist in Ihrem Fall besser als die Tastaturmethoden. Wenn textField den Fokus erhält, wird die - (void)textFieldDidBeginEditing:(UITextField *)textField; ausgelöst. Wenn sie den Fokus verliert, wird die - (void)textFieldDidEndEditing:(UITextField *)textField; wird gefeuert.

73
Malek_Jundi
-(BOOL)textFieldShouldBeginEditing:(UITextField*)textField {
if (textField.tag == 1) { //first textField tag
    //textField 1
}
else {
   //textField 2
}
}
9

Verwenden Sie UITextFieldDelegate

und

func textFieldDidBeginEditing(textField: UITextField) {
        println("did")
        if textField.tag == 1{
            self.txtFullName.layer.borderColor = UIColor.blueColor().CGColor
        }
    }
5

In Swift 4:

  1. Implementiere UITextFieldDelegate in deine ViewController Klasse
  2. Fügen Sie die Ausgänge für das textFields hinzu, auf das Sie den Fokus erkennen möchten
  3. Implementieren Sie die Funktion textFieldDidBeginEditing (falls Sie über diese bestimmte Aktion benachrichtigt werden möchten, lesen Sie Apples Dokumentation ) und füllen Sie sie mit Ihrem Code
  4. Weisen Sie in viewDidLoad() Ihre ViewController -Klasse als Delegaten für das textField zu, das Sie zuvor in Schritt 2 hinzugefügt haben

Es muss ähnlich aussehen wie:

class ViewController: UIViewController, UITextFieldDelegate {
    @IBOutlet weak var yourTextField: UITextField!

    func textFieldDidBeginEditing(_ textField: UITextField) {
        // Your code here
    }

    override func viewDidLoad() {
        super.viewDidLoad()
        yourTextField.delegate = self
    }

    ...

}
3
Raul Olmedo