2009-12-11 7 views
1

J'ai un champ de texte toujours au format "XX0000000XX", X étant une lettre, 0 étant un nombre. Je change de clavier lorsque l'utilisateur tape, selon qu'il doit entrer un chiffre ou une lettre. Cela fonctionne très bien, jusqu'à ce que l'utilisateur positionne le curseur au milieu du champ de texte pour effectuer une modification. Comment déterminer la position du curseur dans un UITextField?Comment déterminer la position du curseur d'un UITextField?

Je sais qu'un UITextView a un selectedRange qui peut être utilisé, mais j'ai lu que vous ne pouvez pas forcer un UITextView à être une entrée de ligne unique? c'est-à-dire désactiver plusieurs lignes de texte.

+0

Aucune des deux réponses ci-dessous ne convient à cette situation (bien qu'elles aient toutes deux un certain mérite - merci!). J'ai envoyé un bug à Apple pour détecter la position du curseur, et le client est content de l'utiliser comme il est maintenant. Phew. Faites-moi savoir si vous avez une solution qui permet de détecter la position du curseur. –

+0

S'il vous plaît laissez-nous savoir quand Apple va répondre au bug. ;) – SNR

Répondre

0

Mors intelligent avec les claviers. Ma pensée immédiate est que peut-être que vous ne devriez pas permettre à l'utilisateur de déplacer le curseur en premier lieu.

Ce n'est pas sans précédent dans l'interface utilisateur de l'iPhone. La vue du clavier du téléphone, par exemple, restreint l'utilisateur à une entrée séquentielle. J'ai également trouvé cette technique utile pour l'entrée de monnaie. Partout avec une entrée qui a une syntaxe très rigide, fondamentalement, semble être un candidat pour ce genre de traitement. Ça pourrait bien marcher pour votre situation.

Je ne sais pas si cela est la meilleure méthode, mais voici comment je le fais:

A UITextField pour capturer l'entrée et un UILabel pour afficher l'entrée. Le champ de texte est caché mais est envoyé à devenir firstFesponder pour déclencher le clavier. Au fur et à mesure que l'utilisateur tape, les méthodes déléguées font le nécessaire pour formater le texte, si nécessaire (comme avec la devise), et mettent à jour UILabel, qui fournit les commentaires des utilisateurs sur leur saisie. En fonction de la situation, vous voudrez peut-être styliser UILabel de façon à ce que l'utilisateur ne puisse pas l'utiliser comme s'il s'agissait d'un champ de texte sélectionnable, tout en le rassurant sur le fait qu'il s'agit en fait de son entrée. .

Avec 11 caractères en jeu, je peux voir comment l'édition de curseurs pourrait être utile. Pourtant, les numéros de téléphone sont souvent dans la même gamme et je n'ai jamais de problème avec l'éditeur séquentiel dans l'application Téléphone.

0

Il existe une méthode UITextDelegate -textField:shouldChangeCharactersInRange:replacementString: qui devrait être tout ce dont vous avez besoin pour faire ce que vous décrivez. Implémentez-le pour appliquer les règles de formatage souhaitées. Vous ne devriez pas se soucier où le curseur est, juste la gamme de la modification qui est proposée.

Questions connexes