2013-04-15 11 views
10

Voglio rilevare ogni volta che l'utente preme un tasto della tastiera.Come rilevare il tasto della tastiera premuto in iphone?

Qualsiasi metodo chiamato solo quando si digita un carattere e non quando viene visualizzata la tastiera.

Grazie !!

+2

Ho una domanda per te, invece, come può l'utente digitare qualcosa se la tastiera non viene mostrata? –

+0

Buona risposta qui. http://stackoverflow.com/questions/5216245/how-to-handle-key-events-in-iphone – Dilip

+1

Stai usando un campo di testo? di controllo [questo] [1] [1]: http://stackoverflow.com/questions/7010547/uitextfield-text-change-event –

risposta

37

È direttamente possibile gestire gli eventi della tastiera ogni volta che un utente preme un tasto:

In caso di UITextField

- (BOOL)textField:(UITextField *)textField 
      shouldChangeCharactersInRange:(NSRange)range 
      replacementString:(NSString *)string { 

    // Do something here... 
} 

In Caso di UITextView:

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

    // Do something here... 
} 

Quindi ogni volta che uno di questi metodi viene chiamato per ogni tasto che si preme usando la tastiera.

È anche possibile utilizzare NSNotificationCenter. Hai solo bisogno di aggiungere qualcuno di questi nel metodo ViewDidLoad.

NSNotificationCenter *notificationCenter = [NSNotificationCenter defaultCenter]; 

UITextField:

[notificationCenter addObserver:self 
         selector:@selector(textFieldText:) 
          name:UITextFieldTextDidChangeNotification 
         object:yourtextfield]; 

allora si può mettere il codice in modo textFieldText::

- (void)textFieldText:(id)notification { 

    // Do something here... 
} 

UITextView

[notificationCenter addObserver:self 
         selector:@selector(textViewText:) 
          name:UITextViewTextDidChangeNotification 
         object:yourtextView]; 

allora si può mettere il codice in modo textViewText::

- (void)textViewText:(id)notification { 

    // Do something here... 
} 

Speranza che aiuta.

+1

Se ho un UITextView e premo il tasto ReturnKey, verrà chiamato anche il metodo textViewDidChange. C'è un modo per riconoscere quale tasto è stato premuto sulla tastiera? –

+0

Che dire dei tasti premuti in una UIWebView? –

+5

Nota: shouldChangeTextInRange: non viene chiamato se il campo di testo è vuoto e si preme il tasto Canc. Il campo di testo sembra rilevare che il campo non è stato modificato in modo che il metodo delegato non debba essere attivato =/ – Zhang

1

Supponendo che la tastiera sta mostrando come conseguenza degli utenti toccando un UITextField, è possibile effettuare da soli il delegato e implementare questo metodo:

- (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string 

Si chiamerà ogni volta che un utente preme un tasto.

+1

questo chiamerà ogni volta, ma se l'utente cancella tutto il testo, questo non verrà chiamato –

+0

Se il campo di testo è vuoto e si preme il pulsante dello spazio indietro non viene chiamato. – Ramakrishna

Problemi correlati