在虚拟键盘上检测按键
我正在为我的儿子开发一个小型儿童游戏,涉及虚拟键盘上的计时。在虚拟键盘上检测按键
是否可以检测虚拟键盘上的按键何时被按下?即获得触摸通知(touchesBegan)?我不需要知道哪个按键被按下,只要按下按键动作开始。
无法直接从虚拟键盘获取触摸事件。但是,您可以使用屏幕外的UITextField
,以便它不可见并请拨打becomeFirstResponder
来显示键盘。然后,如Khomsan建议的那样,您可以实现委托方法textView:shouldChangeTextInRange:
,以便在按下某个键时得到通知。
更清晰的可能性是编写实现UIKeyInput
协议的自定义UIControl
。你只需要提供insertText:
,deleteBackward
和hasText
的实现(对于这个,你可以简单地总是返回YES
)。为了使键盘可见,您需要再次拨打becomeFirstResponder
作为您的自定义控件。
这两种方法的共同之处在于,只有在密钥为时才会通知(以便输入文本),而不是在触摸实际开始时才会通知您。正如我所说,直接获取tochesBegan
事件是不可能的。如果你需要的话,你可能不得不实现你自己的屏幕键盘。
是的,你可以只使用:
- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event{
//do what you need
[super touchesBegan:touches withEvent:event];
}
我还需要添加什么来从UITextView获取这些事件? – peterparnes
这只会在您自己的视图中检测到触摸,而不是虚拟键盘。 – omz
放下你要放的地方。 – Cyprian
对于TextView中可以使用...
- (BOOL)textView:(UITextView *)textView shouldChangeTextInRange:(NSRange)range replacementText:(NSString *)text
- (void)textViewDidChange:(UITextView *)textView
对于文本字段可以使用...
- (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string
见UITextViewDelegate和Apple网站上的UITextFieldDelegate。
谢谢。这证实了我怀疑这是不可能的(没有自定义键盘)。我已经有一个关键释放案例的解决方案(textView:shouldChangeTextInRange :)。 是否可以在键盘上放置透明视图,还是浪费时间来尝试? – peterparnes
我想这是可能的,但是你需要为此创建另一个'UIWindow',因为键盘有它自己的窗口,所以你平常的视图层次结构中的任何视图都会在它下面。 – omz
谢谢!欣赏答案! – peterparnes