Comment faire en sorte que lorsque le contenu d'un champ de texte change, une fonction soit appelée?
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) {...}
En fait, il n'y a aucun événement de valeur modifiée pour UITextField
, utilisez UIControlEventEditingChanged
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
}
Pour Swift cela est pratique -
textField.addTarget(self, action: #selector(onTextChange), forControlEvents: UIControlEvents.EditingChanged)
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")
}