检测按键在虚拟键盘上

我正在为儿子做一个小孩子的游戏,涉及虚拟键盘的计时。

是否可以检测虚拟键盘上的按键何时被按下? 即获得触摸通知(touchesBegan)? 我不需要知道按下哪个键,只是当按下动作开始时。

无法直接从虚拟键盘获取触摸事件。 但是,您可以使用放在屏幕外的UITextField ,以便它不可见并调用becomeFirstResponder来显示键盘。 然后,正如Khomsan建议的那样,你可以实现委托方法textView:shouldChangeTextInRange:每当按下一个键时都会收到通知。

UIKeyInput可能性是编写实现UIKeyInput协议的自定义UIControl 。 您只需要为insertText:deleteBackwardhasText提供实现(对于这一个,您可以简单地始终返回YES )。 要使键盘可见,您需要再次为自定义控件调用becomeFirstResponder

这两种方法的共同之处在于,只有在释放键时才会通知您(以便输入文本),而不是在触摸实际开始时。 正如我所说,直接获取tochesBegan事件是tochesBegan 。 如果您需要,您可能需要实现自己的屏幕键盘。

对于TextView,您可以使用…

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

对于TextField,您可以使用…

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

请参阅Apple网站上的UITextViewDelegate和UITextFieldDelegate。

是的你可以使用:

 - (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event{ //do what you need [super touchesBegan:touches withEvent:event]; }