2010-08-19 12 views
3

Existe-t-il un moyen d'implémenter la personnalisation automatique pour un UITextView, par exemple en lui donnant un NSDictionary ou NSArray de Strings à surveiller?UITextView Custom Auto-complétion

Répondre

2

Vous devrez le programmer vous-même. Si vous implémentez le protocole UITextViewDelegate, la fonction

- (BOOL)textView:(UITextView *)textView shouldChangeTextInRange:(NSRange)range replacementText:(NSString *) 

est appelé à chaque fois que l'utilisateur entre/supprime un caractère dans la vue texte. Ainsi, par exemple, si l'utilisateur entre un 'char', alors dans cette fonction, vous allez vérifier le tableau w les mots que vous voulez compléter automatiquement pour voir si cela devrait être complétié automatiquement.

CONDITIONS -

• S'il n'y a qu'une seule valeur qui commence par 's', autocomplete.

• Si aucune valeur ne commence par 's' ou si plusieurs valeurs commencent par 's', (ELSE) ne se termine pas automatiquement.

Je recommande que votre tableau de chaînes de saisie semi-automatique soit trié par ordre alphabétique, et que vous gardiez une variable globale qui pointe à l'endroit où vous vous étiez arrêté dans le tableau. Par exemple si l'utilisateur entre 's', et le premier mot avec 's' est dans l'index de tableau 5, alors quand l'utilisateur entre un autre caractère, 'u' fait la chaîne de recherche "su", vous devriez pouvoir vous souvenir de commencez dans l'index de tableau 5 pour trouver la chaîne de saisie semi-automatique plus rapidement (et ne pas itérer par des données inutiles). J'utiliserais un tableau C pour cela, bien qu'un NSArray fonctionnerait.

+0

2 questions, Est-ce que cette méthode fonctionne avec un UITextView (comme mentionné dans ma question) et comment pourrais-je réellement faire l'autompletion. Merci! – Joshua

+0

J'ai mis à jour ma réponse. aussi loin que l'autocomplétion va, c'est plus difficile avec uitextview. vous devrez trouver les derniers caractères entrés dans la vue de texte, et voir si elles peuvent être complétées automatiquement en les vérifiant à chaque élément dans votre tableau de chaînes avec les conditions que j'ai décrites ci-dessus. Comme je l'ai mentionné, vous pouvez optimiser votre code pour qu'il s'exécute plus rapidement si vous ne le faites pas parcourir la liste à chaque fois. Si vous trouvez que vous pouvez effectuer une saisie semi-automatique, remplacez simplement la sous-chaîne entrée par la chaîne autocompleted. – jmont

+0

Oui, je vois. Souhaitez-vous suggérer de vérifier les conditions en utilisant la méthode 'characterAtIndex:' de 'NSString' lors de l'itération dans le tableau? – Joshua