我正在为儿子做一个小孩子的游戏,涉及虚拟键盘上的计时。
是否可以检测虚拟键盘上的按键何时被按下?即得到一个触摸通知(touchesBegan)?我不需要知道按下哪个键,只是当按下动作开始时。
答案 0 :(得分:2)
对于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。
答案 1 :(得分:1)
无法直接从虚拟键盘获取触摸事件。但是,您可以使用放置在屏幕外的UITextField
,以便它不可见,并调用becomeFirstResponder
来显示键盘。然后,正如Khomsan建议的那样,您可以实现委托方法textView:shouldChangeTextInRange:
,以便在按下某个键时收到通知。
更简洁的可能性是编写实现UIControl
协议的自定义UIKeyInput
。您只需要提供insertText:
,deleteBackward
和hasText
的实现(对于这一个,您只需返回YES
)。要使键盘可见,您需要再次为自定义控件调用becomeFirstResponder
。
这两种方法的共同之处在于,只有在释放键时才会通知您(以便输入文本),而不是触摸实际开始时。正如我所说,不可能直接获得tochesBegan
事件。如果您需要,您可能需要实现自己的屏幕键盘。
答案 2 :(得分:-3)
是的,你可以使用:
- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event{
//do what you need
[super touchesBegan:touches withEvent:event];
}