【问题标题】:How to detect touches on the iPhone onscreen keyboard如何检测 iPhone 屏幕键盘上的触摸
【发布时间】:2011-11-29 14:40:39
【问题描述】:

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

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

【问题讨论】:

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


    【解决方案1】:

    您无法向系统提供的键盘添加您想要的内容。但是,您可以通过实现自己的自定义键盘来实现您想要的,它可以具有您想要处理长按键的任何方法。请参阅 previous this previous question 作为如何实现自定义键盘的示例。

    在实现这一点时,您应该使用 iOS 提供的 UILongPressGestureRecognizer,而不是检查 touchesEnded 和 touchesBegan 来识别何时发生长触摸。

    【讨论】:

      【解决方案2】:

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

      【讨论】:

        【解决方案3】:

        将这些添加到您的 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];
        

        【讨论】:

        • 谢谢,但这些事件不允许我跟踪某个键被按下了多长时间。我已经捕获了通过 shouldChangeCharactersInRange 方法按下的内容。
        猜你喜欢
        • 2012-09-03
        • 2011-03-14
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2022-08-08
        • 1970-01-01
        • 1970-01-01
        • 2015-04-13
        相关资源
        最近更新 更多