iOS 7自定义键盘UIView触摸事件在底行延迟

Posted

技术标签:

【中文标题】iOS 7自定义键盘UIView触摸事件在底行延迟【英文标题】:iOS 7 custom keyboard UIView touch down event delayed in bottom row 【发布时间】:2014-07-31 07:13:32 【问题描述】:

这是一个奇怪的..

我有一个如下所示的UIView xib 文件:

我已将每个 UIButton touchDowntouchUpInside 事件连接到两个 IBAction 方法:

- (IBAction)touchUpInside:(id)sender

    NSLog(@"touch up inside");
    if (((UIButton *)sender == _enter) | ((UIButton *)sender == _back)) 
        [(UIButton *)sender setBackgroundColor:_color2];
    
    else 
        [(UIButton *)sender setBackgroundColor:_color1];
    


- (IBAction)touchDown:(id)sender

    NSLog(@"touch down");
    [(UIButton *)sender setBackgroundColor:_color2];

除了UIButton 的最底行之外,一切正常,这是奇怪的部分:

touch down 事件被触发,但按钮必须保持 0.5 秒才能改变背景颜色,而其他按钮是瞬时的。

它只发生在UIButton 的最底行,因为我尝试使用按钮@back、0、@enter 切换按钮 7、8、9,如下所示:

我在 Interface Builder 中检查了所有 UIButton 属性是否相同,并且我尝试移动 UIButton 的对象顺序,如您在图片左侧看到的那样,我'我已经没主意了。基本上,奇怪的是 UIControl 行为根据其在父视图中的位置而有所不同...

更新:我将父 UIView 高度值设置得足够大,以至于最后一行下方有 50 个空闲像素,UIButton 现在可以正常工作。我现在能想到的唯一原因是UITabBar 下面有 2 个视图控制器级别。即使这样也没有意义。

【问题讨论】:

【参考方案1】:

The document 说:

希望用户从屏幕底部向上滑动以显示 控制中心。如果 ios 确定从 屏幕底部应该显示控制中心,它不提供 当前正在运行的应用程序的手势。如果 iOS 确定 触摸不应该显示控制中心,触摸可能会稍微 在到达应用程序之前延迟。

这里有一个解决方案: UIButton fails to properly register touch in bottom region of iPhone screen

但是,就你而言,我认为你应该在UIResponder 中使用inputView。 见:https://developer.apple.com/library/ios/documentation/StringsTextFonts/Conceptual/TextAndWebiPhoneOS/InputViews/InputViews.html

inputView 不受该问题的影响。

【讨论】:

好吧,这是有道理的......虽然我没想到 inputView 没有问题,但 inputAccessoryView 有。谢谢! :) 我猜另一件事是 inputView 被限制为 215 像素高,inputAccessoryView 几乎是任何东西。

以上是关于iOS 7自定义键盘UIView触摸事件在底行延迟的主要内容,如果未能解决你的问题,请参考以下文章

iOS 手势识别

iOS中最早的注册触摸事件

如何告诉带有 UITextField 的自定义 UIView 接收触摸事件

使用 UIGestureRecognizer 传递奇怪的 ios 触摸事件

没有uigesturerecognizer的ios触摸位置

iOS边练边学--触摸事件以及能够拖拽的UIView的练习