web-dev-qa-db-fra.com

Événement UITextField Value Changed?

Comment faire en sorte que lorsque le contenu d'un champ de texte change, une fonction soit appelée?

53
Christian Stewart

Objectif-C

[myTextField addTarget:self 
                action:@selector(textFieldDidChange:) 
      forControlEvents:UIControlEventEditingChanged];

Swift 4

myTextField.addTarget(self, action: #selector(textFieldDidChange(sender:)), for: .editingChanged)

@objc func textFieldDidChange(sender: UITextField) {...}
130
kovpas

En fait, il n'y a aucun événement de valeur modifiée pour UITextField, utilisez UIControlEventEditingChanged

20
Dmitry Shevchenko

J'ai résolu le problème de modification du comportement de shouldChangeChractersInRange. Si vous retournez NON, les modifications ne seront pas appliquées par iOS en interne, mais vous avez la possibilité de le modifier manuellement et d'effectuer des actions après les modifications.

- (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string {
    //Replace the string manually in the textbox
    textField.text = [textField.text stringByReplacingCharactersInRange:range withString:string];
    //perform any logic here now that you are sure the textbox text has changed
    [self didChangeTextInTextField:textField];
    return NO; //this make iOS not to perform any action
}
8
Pauls

Pour Swift cela est pratique -

textField.addTarget(self, action: #selector(onTextChange), forControlEvents: UIControlEvents.EditingChanged)
1
Vivek Bansal

c'est ma solution.

Swift 4

textField.addTarget(self, action: #selector(self.textFieldDidChange(sender:)), for: .editingChanged)

@objc func textFieldDidChange(sender: UITextField){
   print("textFieldDidChange is called")
}
0
wsnjy