2013-04-15 162 views
10

我想要檢測用戶何時按任何鍵盤鍵。如何檢測iPhone中按下的鍵盤按鍵?

任何只在鍵入任何字符時才調用的方法,而不是在顯示鍵盤時調用。

謝謝!

+2

我對你有一個問題,如果鍵盤沒有顯示,用戶怎麼輸入什麼? –

+0

這裏的答案很好。 http://stackoverflow.com/questions/5216245/how-to-handle-key-events-in-iphone – Dilip

+1

你使用的是textfield嗎? 檢查[此] [1] [1]:http://stackoverflow.com/questions/7010547/uitextfield-text-change-event –

回答

37

您可以直接處理的鍵盤事件的每次用戶按下一個鍵:

情況的UITextField

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

    // Do something here... 
} 

在UITextView的的案例:

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

    // Do something here... 
} 

因此,每次使用鍵盤按鍵時,都會調用其中一種方法。

也可以使用NSNotificationCenter。你只需要在ViewDidLoad方法中添加任何這些。

NSNotificationCenter *notificationCenter = [NSNotificationCenter defaultCenter]; 

的UITextField:

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

然後你就可以把你的代碼的方法textFieldText:

- (void)textFieldText:(id)notification { 

    // Do something here... 
} 

的UITextView

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

然後你就可以把你的代碼的方法textViewText:

- (void)textViewText:(id)notification { 

    // Do something here... 
} 

希望它能幫助。

+1

如果我有一個UITextView,並且按下ReturnKey,那麼方法textViewDidChange也會被調用。有沒有辦法來識別鍵盤上的哪個按鍵? –

+0

在UIWebView中按鍵怎麼樣? –

+5

注意:如果文本字段爲空並且您按下刪除鍵,shouldChangeTextInRange:不會被調用。文本字段似乎檢測到該字段未更改,因此不需要觸發委派方法=/ – Zhang

1

假設鍵盤是顯示在用戶敲擊一個的UITextField的結果,你可以讓自己的代表和實現這個方法:

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

它將被稱爲每次用戶按下按鍵的時間。

+1

這將每次調用,但如果用戶清除所有文本,則不會調用 –

+0

如果文本字段爲空,並按回空間按鈕,則不會調用它。 – Ramakrishna