ios 子控件超出父控件 - 无法点击的问题 - hitTest

之前开发项目的时候遇到的一些问题,只是简单的记录了一下,现在正好有空整理一下,自己再回顾一下,也分享给大家,写的不对的地方请指正,谢谢!

问题:如下图,子控件的布局超出了底下的父控件,所以在点击子控件进行展开的时候无法接收点击方法。
ios 子控件超出父控件 - 无法点击的问题 - hitTest_第1张图片
image.png

因为父控件(UITabBar)在调用 hitTest:withEvent:方法方法时,由于触摸点不在父控件范围内,所以无法让子控件(UIButton)做为最合适的view去处理点击事件。

解决方法:

重写UITabBar的hitTest:withEvent:方法(准确的说是super调用hitTest:withEvent:,因为要实现在UITabBar添加自定义居中且超出范围的按钮都是通过自定义UITabBar的方式实现的),当无法找到这个最合适的view时,先将触摸点坐标(point参数)转换到button所在坐标系,判断触摸点是否在button范围内,如果在,则返回button为处理事件最合适的view,这样button就能正确触发点击事件.

代码如下:

ios 子控件超出父控件 - 无法点击的问题 - hitTest_第2张图片
image.png

你可能感兴趣的:(ios 子控件超出父控件 - 无法点击的问题 - hitTest)