UIControlEventEditingChanged ne pas me faire virer lors de l'utilisation de setText de UITextfield
Je suis actuellement en train de suivre les états d'un textfield.
Je suis en utilisant une mesure datePicker qui définit le texte via -setText
[self.textField setText:[self.dateFormatter stringFromDate:self.date]];
À l'intérieur de mon textFieldDelegate j'ai écrit le code suivant:
-(void)viewDidLoad {
[super viewDidLoad];
self.travelToOnTextField.delegate = self;
[self.travelToOnTextField addTarget:self action:@selector(travelToOnTextFieldDidChange:) forControlEvents:UIControlEventEditingChanged];
}
-(void)travelToOnTextFieldDidChange:(id)sender
{
NSLog(@"Event Handler called");
}
Si je change le texte par le biais de mon custom Datepicker la Méthode travelToOnDateTextFieldDidChange
n'est pas appelée. Mais si je change le texte à l'aide de mon Clavier d'Ordinateur, il est appelé pour une raison quelconque.
Est-ce intentionnel?
Vous devez vous connecter pour publier un commentaire.
J'ai du taux de cette question parce que c'est super important.
Il semble que cela a changé dans iOS6. Peut-être même iOS5. Cet événement UTILISÉ à la méthode privilégiée pour l'observation des modifications de texte dans un objet UITextField. Je l'ai utilisé depuis iOS3. Après recompilation de mon application sur iOS6 pour effectuer certaines mises à jour, il a mystérieusement cessé de travailler. Des parties de mon app:
et d'autres utilisent
ou
Pour quelque raison que ce soit, il est important de noter que setText événements n'est plus le feu de l'Édition d'un événement a Changé. Si vous utilisez un insertText méthode, elle fonctionne encore.
Donc, si vous êtes dans une impasse et vous avez juste besoin d'une solution rapide, vous pouvez changer votre code à partir de:
ou
à
Cela fonctionne aussi:
J'espère que cela aide quelqu'un, parce que j'ai perdu une journée entière à essayer de comprendre pourquoi ce code a soudainement cessé de fonctionner quand je me suis déplacé jusqu'à iOS6.
Vous pouvez toujours utiliser NSNotificationCenter ainsi. Voir la UITextField de référence pour plus d'info:
https://developer.apple.com/documentation/uikit/uitextfield
[textField sendActionsForControlEvents:UIControlEventEditingChanged]
œuvres.insertText(_:)
devraient travailler que si le champ de texte est le premier intervenant, car la documentation deUIKeyInput
dit qu'il insère le texte à la position du curseur.Appelez simplement
sendActionsForControlEvents:
après avoir défini le texte:Testé sur iOS 9.
Dans Swift 2.2+, basé sur @Shaolo la réponse de
EditingChanged
Après le changement de champ de texte de code, ajoutez également sendActionsLine
La documentation dit:
Donc touch seulement?
Mise À Jour: Swift 4.2