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.
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é.
-(BOOL)textFieldShouldBeginEditing:(UITextField*)textField {
if (textField.tag == 1) { //first textField tag
//textField 1
}
else {
//textField 2
}
}
Utilisez UITextFieldDelegate
et
func textFieldDidBeginEditing(textField: UITextField) {
println("did")
if textField.tag == 1{
self.txtFullName.layer.borderColor = UIColor.blueColor().CGColor
}
}
Dans Swift 4:
UITextFieldDelegate
dans votre classe ViewController
textFields
sur lequel vous souhaitez détecter le focustextFieldDidBeginEditing
(au cas où vous voudriez être averti de cette action spécifique, voir documentation d'Apple ) et remplissez-la avec votre codeviewDidLoad()
affectez votre classe ViewController
en tant que délégué pour le textField
que vous avez précédemment ajouté à l'étape 2Il 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
}
...
}