2010-07-31 6 views
0

Comment savoir quelles touches l'utilisateur a enfoncées dans un textView?Cocoa Touch - Capture du clavier

Et avant de vous demander, car il ressemble à un keylogger, je fais une application de frappe et j'ai besoin de savoir si ce qu'ils ont entré de la clé correspondante à ce qu'ils ont été invités.

Merci!

Répondre

1

Vous devez définir delegate de UITextView sur l'une de vos classes. (En IB ou par programme, peu importe)

Dans votre délégué, vous pouvez mettre la fonction suivante, ou quelque chose de similaire:

-(BOOL)textView:(UITextView *)textView shouldChangeTextInRange:(NSRange)range 
        replacementText:(NSString *)text 
{ 
    if ([text length] == 0) return YES; // always allow deletion of characters 

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

    if ([new length] > 100) // PUT IN YOUR MAGIC CONDITION HERE 
    { 
     return NO; // don't allow the edit to happen 
    } 

    return YES; // by default, allow the edit to happen 
} 

cela limite seulement l'entrée à 100 caractères, mais vous pouvez le faire aussi compliqué que vous le souhaitez.

modifier ps, ​​vous a demandé « quelle touche l'utilisateur a appuyé », mais étant donné que nous faisons cela peut donner aussi copier & a coller et auto-correction, un text qui est plus long que 1 caractère!

+0

je l'ai lié dans mon propriétaire de fichiers (voir controler) est-ce bon? – user377419

+0

Oui, si vous avez créé votre propre classe de contrôleurs de vue contenant cette fonction et que vous avez défini la classe du contrôleur sur votre propre classe dans IB, cela devrait fonctionner. – mvds

+0

Dites-moi si je fais ce droit. J'ai 2 classes app délacer et voir le contrôleur. J'ai traîné le delagate de mon textView dans le propriétaire des fichiers. J'ai copié collé cette méthode dans mon contrôleur de vue et l'ai appelé comme ça. Je suppose que les arguments sont le nom de la vue que vous voulez affecter, le nombre de caractères dans la vue ou la plage que vous voulez. affecter et le texte que vous voulez avoir mis lorsque le texte ne correspond pas aux paramètres. – user377419