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

问题描述:

我正在尝试检测用户在键入时触摸键盘上的某个键多长时间,以便例如在按某个键时弹出对话框足够长的时间。如何检测iPhone屏幕键盘上的触摸

通过测量touchesEndedtouchesBegan之间的时间来检测此常规视图是微不足道的。但是,我没有收到任何来自键盘的事件。关于如何从键盘接收touchesEndedtouchesBegan事件的任何想法?

您无法将所需的内容添加到系统提供的键盘。然而,你可以通过实现你自己的自定义键盘来实现你想要的,你可以使用任何你想要处理长按键的方法。作为如何实现自定义键盘的一个示例,请参阅previous this previous question

执行此操作时,不是检查touchesEnded和touchesBegan来确定何时发生长触摸,您应该提供iOS提供的UILongPressGestureRecognizer

这些听众添加到您的文本字段

// 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]; 
+0

谢谢,但这些事件不允许我跟踪某个键被按下多长时间。我正在捕获通过shouldChangeCharactersInRange方法已经按下的内容。 – user1071490

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