2013-04-15 55 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