未检测到 UIToolBar 上 UIToolBar 上的模态视图中的 UIButton 触摸未检测到

Posted

技术标签:

【中文标题】未检测到 UIToolBar 上 UIToolBar 上的模态视图中的 UIButton 触摸未检测到【英文标题】:UIButton in Modal View over UIToolBar Over UITabBar Touch Not Detected 【发布时间】:2013-09-25 19:25:53 【问题描述】:

我的视图底部有一个工具栏。有一个名为 Scan 的 UIBarButton 需要检测某人何时按住手指以及何时抬起手指。

因为 UIBarButton 继承自 UIControl 我无法检测到这一点。作为一种解决方法,我创建了一个不可见的 UIButton 并将其放在我的工具栏顶部,并简单地检测来自它而不是 UIBarButton 的触摸。

在我将视图呈现为模态视图(隐藏 UITabBar)之前,如果我触摸工具栏所在的位置我无法检测到它,这可以正常工作。如果我触摸工具栏上方,它就可以正常工作。

这是一个屏幕截图。 (隐形按钮已被涂成红色并拉高以进行测试)

在下面的屏幕截图中,如果您触摸工具栏所在的位置,则不会发生任何事情。但在它上面是红色的地方它工作得很好。

这是我的一些代码。

    - (IBAction) scanTouchUp:(id)sender 
    [linea barcodeStopScan:nil];  


- (IBAction) scanTouchDown:(id)sender 
    [linea barcodeStartScan:nil];   

这些方法分别附加到“Touch Down”和“Touch Up Inside/Outside”。

任何帮助将不胜感激。

【问题讨论】:

所以红色部分是您仍想在模态视图中检测触摸的位置?只有红色部分? 是的,在红色框下方是一个 uibarbutton 项目,上面写着“扫描”。当您按住红色部分时,它会激活条码扫描器外围设备。 【参考方案1】:

如果 UIButton 超出其父视图的边缘,或者覆盖了不同后代视图的一部分,则可能是点击测试不适用于该按钮。 (即按钮位于底部栏的顶部)。

您可以通过确保按钮被点击测试来解决这些问题。您可以通过覆盖包含该按钮的视图上的hitTest:withEvent: 方法来执行此操作。这可能看起来像这样:

-(UIView *)hitTest:(CGPoint)point withEvent:(UIEvent *)event

  UIView *result = [redButton hitTest:[redButton convertPoint:point fromView:self] withEvent:event];
  if (result)
    return result;

  return [super hitTest:point withEvent:event];

这仅在您添加此更改的视图在包含给定点的另一个视图之前进行命中测试时才有效。

【讨论】:

其次,它几乎可以肯定是命中测试。在其父视图边界之外绘制的视图是可见的,但不可点击。在您的视图中将clipsToBounds 设置为YES 将有助于调试此类问题。 我收到“'UIViewController' 没有可见的@interface 声明选择器'hitTest:withEven:' 用于“返回 [super hitTest:point with Event:event]; 是的,您需要将要添加按钮的视图子类化为子视图。 我对它进行了子类化。我创建了一个 IBOutlet。然后在我的笔尖中,我将 UIView 更改为我的子类并将按钮附加为新的参考插座。没有什么不同:( 我刚刚注意到,如果我按下了按钮,然后将手指移到按钮的边界之外并保持按下状态,就会记录为按下。【参考方案2】:

与其在工具栏上手动创建一个不可见的按钮,不如尝试使用

创建一个UIBarButton 实例

- (id)initWithCustomView:(UIView *)customView

并将其作为所有其他项目添加到工具栏。

这个自定义视图(传递给上述方法)将是一个“扫描”按钮。然后,您可以随心所欲地处理它,而无需借助一些不可见的控件。

【讨论】:

【参考方案3】:

你可以试试这个。我认为您需要先将工具栏添加到子视图中。然后只有您将不可见的按钮添加到子视图中。确保它们都具有相同的超级视图。

【讨论】:

以上是关于未检测到 UIToolBar 上 UIToolBar 上的模态视图中的 UIButton 触摸未检测到的主要内容,如果未能解决你的问题,请参考以下文章

iOS 13 UIToolBar 样式

UIBarButtonItems 未显示在 UIToolbar 上

UIToolbar 未添加到键盘

UIToolbar 和 UIImageView 未显示在模拟器中

出现取消按钮,但完成按钮未出现在 uitoolbar 中

UIToolbar 未位于设备底部,但在情节提要中显示正常