如何检测iPhone屏幕键盘上的触摸

时间:2011-11-29 14:40:40

标签: iphone objective-c cocoa-touch uigesturerecognizer touchesbegan

我正在尝试检测用户在键入时触摸键盘上的键的时间长度,例如,当按下某个键足够长的时间时,我会弹出一个对话框。

通过衡量touchesEndedtouchesBegan之间的时间来检测常规视图是非常简单的。但是,我没有收到键盘上的任何事件。关于如何从键盘接收touchesEndedtouchesBegan事件的任何想法?

3 个答案:

答案 0 :(得分:2)

您无法将所需内容添加到系统提供的键盘中。但是,您可以通过实现自己的自定义键盘来实现您想要的功能,键盘可以使用您想要处理长按键的任何方法。请参阅previous this previous question,了解如何实施自定义键盘。

实现此功能时,不应检查touchesEnded和touchesBegan以确定何时发生长时间触摸,而应该是iOS提供的UILongPressGestureRecognizer

答案 1 :(得分:1)

我不相信你能够做到这一点(特别是在App Store应用程序中),因为系统本身在按住某些键时会显示额外的菜单,甚至可能没有屏幕键盘(蓝牙键盘)。

答案 2 :(得分:0)

将这些添加到TextField的侦听器

// editing began:
[textField addTarget:self action:@selector(textFieldEditingDidBegin:) forControlEvents:UIControlEventEditingDidBegin];
// editing changed:
[textField addTarget:self action:@selector(editingChanged:)forControlEvents:UIControlEventEditingChanged];
// editing ended: 
[textField addTarget:self action:@selector(editingDidEnd:) forControlEvents:UIControlEventEditingDidEnd];

您还可以使用这些通知知道键盘显示和隐藏的时间:

// keyboard shows on screen:
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(keyboardDidShow) name:UIKeyboardDidShowNotification object:nil];
// keyboard is hidden:
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(keyboardDidHide) name:UIKeyboardDidHideNotification object:nil];