web-dev-qa-db-fra.com

Détecter le changement de focus pour UITextField

J'essaie de définir l'animation pour que la vue se déplace vers le haut lorsque le clavier se cache et apparaît pour les champs de texte et je l'ai fait fonctionner parfaitement, mais lorsque le focus se déplace d'un champ de texte à un autre, cela ne fonctionne pas puisque le clavier était déjà montré.

Dans viewDidLoad, j'ai enregistré les éléments suivants:

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

puis dans les méthodes keyboardWillShow et keyboardWillHide, il détermine si la vue doit se déplacer ou non et s'animer en conséquence. Mais si un clavier était déjà affiché et que l'utilisateur clique sur un autre champ de texte qui a besoin de la vue pour monter, la méthode ne serait pas appelée. Existe-t-il un moyen de détecter si un focus a été changé pour un autre champ de texte alors que le clavier était déjà affiché? Ce serait formidable s'il existe un moyen de le faire sans avoir à définir tous les champs de texte pour les délégués.

Merci d'avance.

34
Dennis

Utilisez les méthodes déléguées UITextField .. c'est mieux dans votre cas que les méthodes clavier .. lorsque textField obtient le focus, la - (void)textFieldDidBeginEditing:(UITextField *)textField; sera déclenchée .. et quand elle perd le focus - (void)textFieldDidEndEditing:(UITextField *)textField; sera renvoyé.

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

Utilisez UITextFieldDelegate

et

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

Dans Swift 4:

  1. Implémentez UITextFieldDelegate dans votre classe ViewController
  2. Ajoutez les prises pour le textFields sur lequel vous souhaitez détecter le focus
  3. Implémentez la fonction textFieldDidBeginEditing (au cas où vous voudriez être averti de cette action spécifique, voir documentation d'Apple ) et remplissez-la avec votre code
  4. Sur viewDidLoad() affectez votre classe ViewController en tant que délégué pour le textField que vous avez précédemment ajouté à l'étape 2

Il doit ressembler à:

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