检测按键在虚拟键盘上
我正在为儿子做一个小孩子的游戏,涉及虚拟键盘的计时。
是否可以检测虚拟键盘上的按键何时被按下? 即获得触摸通知(touchesBegan)? 我不需要知道按下哪个键,只是当按下动作开始时。
无法直接从虚拟键盘获取触摸事件。 但是,您可以使用放在屏幕外的UITextField
,以便它不可见并调用becomeFirstResponder
来显示键盘。 然后,正如Khomsan建议的那样,你可以实现委托方法textView:shouldChangeTextInRange:
每当按下一个键时都会收到通知。
更UIKeyInput
可能性是编写实现UIKeyInput
协议的自定义UIControl
。 您只需要为insertText:
, deleteBackward
和hasText
提供实现(对于这一个,您可以简单地始终返回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]; }