当按钮覆盖在 tableview 顶部时,如何防止 tableview 单元格注册点击?

How to prevent tableview cell registering a tap when a button is overlaid on top of a tableview?

我的应用程序有一个标签栏,我在标签栏的中央添加了一个大按钮。为此,我只需创建一个按钮并将其作为子视图添加到选项卡栏。

按钮的顶部越过标签栏的顶部边缘,位于表格视图的顶部。这是屏幕截图。

当我点击按钮的底部(绿色箭头)时,它工作正常,但如果我点击按钮的顶部(红色箭头)- 覆盖 tableview 的位 - 按钮的动作未被触发,而是按钮下方的单元格正在注册点击。

我该如何防止这种情况发生?

如果视图框架超出其父视图框架,您将不会收到任何超出父视图框架的触摸事件。这就是这里发生的情况,因为大按钮可能是 TabBar 的子视图。将此添加按钮解析为 TabBarControllers 视图的子视图而不是 TabBar 并设置适当的约束。

另一种解决方案是为这个大按钮创建一个专用的 UIButton 子类并覆盖 hitTest(point:event:) 方法。

供参考: Capturing touches on a subview outside the frame of its superview using hitTest:withEvent: