6
votes

Quelle est la meilleure façon d'obtenir la sélection Uitextfield Modification des notifications?

Utilisation du centre de notification, comme décrit dans Comment puis-je obtenir un TextDidChange (comme pour une méthode UiseearchBar) pour un Uitextfield? , vous permet d'obtenir une notification lorsque le texte de l'IOS Uitextfield change. Je n'ai pas vu de notification similaire pour les changements de sélection. Quelle est la meilleure façon de détecter et de répondre aux modifications de la sélection pour un Uitextfield?


0 commentaires

4 Réponses :


-5
votes

Câblez une méthode à l'aide d'une cible / d'action dans l'événement Contrôle code> uicontroleventeDItingChanged code> sur votre instance de uitextfield code>. Cela peut être fait dans le constructeur d'interface ou dans le code en ajoutant une paire cible / action dans le champ de texte, puis implémentant la méthode spécifiée.

[self.textField addTarget:self action:@selector(textFieldTextChanged:) forControlEvents:UIControlEventEditingChanged];


1 commentaires

UicontroleVenteDItingChanged fait référence uniquement aux modifications du texte. C'est-à-dire que l'action ne tire que lorsque le texte change alors que le champ de texte est en identifiant . Cela n'inclut pas les changements de sélection.



0
votes

Ce lien a une solution sans messager avec des API privées:

En bref: Sous-classe Uitextfield, implémenter xxx

et vérifier si la plage de sélection a changé. Mais cela ne notifie pas les robinets.

Donc, ce que j'ai fait est après la sous-classement, observez la propriété sélectionnéeTextrange Propriété: xxx

Fonctionne très bien dans iOS8.


6 commentaires

Pourquoi vous ne remplacez pas [UITEXTFIELD SETSELLECTEDTEXTROGANGE: (UITEXTROGANGE *) SELECTELLETEXTROGANGE] Si vous êtes de toute façon, Sous-classe Uitextfield? Ensuite, tous les changements viennent dans cet endroit.


@Leo 1. Je ne veux pas changer le comportement, obtenez seulement des notifications 2. Je viens de vérifier dans la cour de jeu et je pense que vous ne pouvez pas remplacer cette fonction.


Cela fonctionne pour moi (iOS 8 + 9). De cette façon, j'ourcez les besoins pour éliminer l'observateur à l'endroit approprié.


Votre choix, je ne remplacerais pas une méthode privée, mais probablement une chose de goût.


@Krisdigital Si vous remplacez SetSelectedTexTrange et dans son appel de mise en œuvre [Super SetSelectedTextrange: Texte] , vous maintiendrez le comportement original de la superclasse, mais aussi d'obtenir un point de notification


@Nalexn je sais, n'hésitez pas à remplacer à votre goût;)



0
votes

Il existe un moyen simple de détecter la sélection dans Textfield

Ajouter un objet de propriété d'objet dans la vue ViewDidAppear P> xxx pré>

puis ajouter une fonction d'observation pour la propriété P>

[self.keyboardInputFieldPassword removeObserver:self forKeyPath:@"selectedTextRange" context:nil];


0 commentaires

0
votes

SWIFT 4 xxx


0 commentaires