comment faire pour déplacer le curseur dans UITextField après la définition de sa valeur
quelqu'un peut-il m'aider à ce sujet: j'ai besoin de mettre en œuvre UITextField
pour le numéro d'entrée. Ce numéro doit toujours être au format décimal à 4 places par exemple 12.3456 ou 12.3400.
J'ai donc créé NSNumberFormatter
qui m'aide avec des décimales.
Je suis en train de le UITextField
valeur dans
-(BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string
la méthode.
Je proccess d'entrée, utilisez formateur et enfin appeler [textField setText: myFormattedValue];
Cela fonctionne bien, mais cet appel déplace le curseur à la fin de mon domaine. Qui est indésirable. E. g. J'ai 12.3400 dans mon domaine et que le curseur est situé sur le début et types d'utilisateurs de la numéro 1. La valeur du résultat est 112.3400 mais le curseur est déplacé à la fin. Je veux finir avec le curseur lorsque l'utilisateur s'attend (juste après le numéro 1 récemment ajouté). Il existe certaines rubriques sur le réglage du curseur dans TextView
mais c'est UITextField
. J'ai aussi essayé d'attraper selectedTextRange
du champ, qui enregistre la position du curseur correctement, mais après setText
appel de méthode, cela change automatiquement et l'origine UITextRange
est perdu (changé à actuel). j'espère que mon explication est claire.
S'il vous plaît, m'aider à ce sujet. je vous remercie beaucoup.
MODIFIER : Finalement, j'ai décidé de passer à la fonctionnalité de modification de la présentation après toute modification et fonctionne assez bien. Je l'ai fait par l'ajout d'un sélecteur de forControlEvents:UIControlEventEditingDidEnd
.
- Quand vous lisez les
selectedTextRange
, pouvez-vous ne pas le copier en tant que propriété dans la classe qui joue le rôle deUITextFieldDelegate
et puis re-définir aprèssetText:
? - Phillip, qui ne fonctionne pas. Après avoir défini le texte avec setText, le UITextRange que vous avez recueillies avant la mise en place du texte est réinitialisé à la valeur null, et donc vous ne pouvez pas la remettre par la suite à la fin UITextField.
Vous devez vous connecter pour publier un commentaire.
Après la
UITextField.text
propriété est modifiée, toutes les références précédentes, àUITextPosition
ouUITextRange
les objets qui ont été associés à l'ancien texte sera mis à zéro une fois que vous définissez la propriété text. Vous avez besoin de stocker ce que le texte de décalage sera après la manipulation sera AVANT de définir la propriété text.Cela a fonctionné pour moi (remarque, vous n'avez qu'à tester si cursorOffset est < textField.texte.la longueur si vous supprimez tous les caractères à partir de t dans l'exemple ci-dessous):
Et voici la swift version :
Ici est une swift 3 version
Mettre en œuvre le code décrit dans cette réponse: En déplaçant le curseur vers le début de UITextField
EDIT: De cette réponse, il semble que vous pouvez simplement utiliser ce code avec votre UITextField si vous utilisez iOS 5 ou supérieur. Sinon, vous devez utiliser un UITextView à la place.
Ce qui a effectivement travaillé pour moi, c'était très simple, il suffit d'utilisé l'expédition principale async: