2009-02-10 4 views

Répondre

4

Vous pouvez le faire en attribuant un délégué à la UITextView, et mettre en œuvre la méthode suivante dans le délégué:

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

Dans le corps il suffit d'écrire un code qui scanne à travers le texte d'entrée pour voir si vous trouvez les caractères que vous souhaitez filtrer, si vous les voyez, renvoyez NO, sinon, retournez YES.

+0

Ce n'est pas suffisant. Lorsque l'utilisateur colle du texte, le caractère interdit peut être * dans * le texte collé. Dans ce cas, vous pouvez ne pas vouloir rejeter complètement la pâte. Vous pourriez préférer supprimer (ou remplacer) les caractères interdits. Je lutte toujours pour y parvenir dans tous les cas. –

0

Malheureusement, ce n'est pas si simple, car textView:shouldChangeTextInRange: replacementText: n'est pas nécessairement appelé avec des chaînes à un caractère. C'est pour la saisie au clavier, mais ce n'est pas lors du collage, ou lors de l'utilisation de la reconnaissance vocale pour entrer du texte.

Alors, que voulez-vous faire si l'utilisateur colle (ou dicte) une chaîne contenant des caractères interdits? Vous pouvez laisser passer tout le texte valide et seulement supprimer (ou remplacer) les caractères indésirables.

L'idée incorrecte serait de corriger le texte dans la routine déléguée textViewDidChange:. Bien que cela semble fonctionner, il empêche en quelque sorte l'entrée de la parole de travailler dans le UITextView.

L'idée correcte est de mettre en œuvre textView:shouldChangeTextInRange: replacementText: avec un filtrage complet. Voici un exemple d'implémentation qui filtre les nouvelles lignes:

- (BOOL)textView:(UITextView *)textView shouldChangeTextInRange:(NSRange)range replacementText:(NSString *)text 
{ 
    if([text isEqualToString:@"\n"]) { 
     [textView resignFirstResponder]; // dismiss keyboard 
     return NO; 
    } 

    text = [text stringByReplacingOccurrencesOfString:@"\n" withString:@" "]; // replace by spaces 

    NSString *fullText = [textView.text stringByReplacingCharactersInRange:range withString:text]; 
    textView.text = fullText; 

    return NO; 
} 

Notez qu'il rejette le clavier lorsque l'utilisateur frappe sur la touche Entrée. Mais pas tout à fait parfaitement: il va également rejeter le clavier lorsque l'utilisateur colle un seul caractère de nouvelle ligne. Cela pourrait être un problème, mais cela ne devrait arriver que rarement.

Questions connexes