2013-04-15 13 views
10

Chcę wykryć, gdy użytkownik naciśnie dowolny klawisz klawiatury.Jak wykryć klawisz klawiatury wciśnięty w iphone?

Dowolna metoda, która jest wywoływana tylko podczas wpisywania dowolnego znaku, a nie po wyświetleniu klawiatury.

Dzięki!

+2

Mam dla ciebie pytanie, jak użytkownik może wpisać cokolwiek, jeśli klawiatura nie jest wyświetlana? –

+0

Dobra odpowiedź tutaj. http://stackoverflow.com/questions/5216245/how-to-handle-key-events-in-iphone – Dilip

+1

Czy używasz textfield? wyboru [to] [1] [1]: http://stackoverflow.com/questions/7010547/uitextfield-text-change-event –

Odpowiedz

37

można bezpośrednio obsługiwać zdarzenia klawiatury każdym czasie użytkownik naciśnie klawisz:

W przypadku UITextField

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

    // Do something here... 
} 

In Case of UITextView:

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

    // Do something here... 
} 

Więc za każdym razem jedna z tych metod jest wywoływana dla każdego klawisza, który naciskasz przy użyciu klawiatury.

Możesz również użyć NSNotificationCenter. Trzeba tylko dodać dowolne z nich w metodzie ViewDidLoad.

NSNotificationCenter *notificationCenter = [NSNotificationCenter defaultCenter]; 

UITextField:

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

Następnie można umieścić swój kod w metodzie textFieldText::

- (void)textFieldText:(id)notification { 

    // Do something here... 
} 

UITextView

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

Następnie można umieścić swój kod w metodzie textViewText::

- (void)textViewText:(id)notification { 

    // Do something here... 
} 

Nadzieję, że to pomaga.

+1

Jeśli mam UITextView i naciskam klawisz ReturnKey, metoda textViewDidChange również zostanie wywołana. Czy istnieje sposób rozpoznania, który klawisz został naciśnięty na klawiaturze? –

+0

Co na temat naciśnięć klawiszy w UIWebView? –

+5

Uwaga: shouldChangeTextInRange: nie jest wywoływana, jeśli pole tekstowe jest puste i naciśnięty klawisz Delete. Pole tekstowe zdaje się wykrywać, że pole nie uległo zmianie, więc metoda delegata nie musi zostać zwolniona =/ – Zhang

1

Zakładając, że klawiatura jest wyświetlana w wyniku użytkownika spustowej na UITextField, można zrobić sobie delegata i wdrożenie tej metody:

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

To będzie wywoływana za każdym razem, gdy użytkownik naciśnie klawisz.

+1

będzie to wywoływać za każdym razem, ale jeśli użytkownik wyczyści cały tekst, nie będzie to nazywane –

+0

Jeśli pole tekstowe jest puste i naciśnij klawisz spacji, to nie jest wywoływane. – Ramakrishna

Powiązane problemy