7
使用hitTest:withEvent捕获子视图在其父视图框架之外的触摸:
我的问题:我有一个超级视图EditView,它基本上占据了整个应用程序框架,一个子视图MenuView只占据了底部约20%的位置,然后MenuView包含了一个自己的子视图ButtonView,该子视图实际上位于MenuViews的范围之外(类似这样:)ButtonView.frame.origin.y = -100。 (注意:EditView具有不属于MenuView视图层次结构的其他子视图,但可能会影响答案。) 您可能已经知道了这个问题:何时ButtonView在的范围内MenuView(或更具体地说,当我的触摸在MenuView的范围内时),ButtonView对触摸事件做出响应。当我的触摸不在MenuView的范围内(但仍在ButtonView的范围内)时,不会收到任何触摸事件ButtonView。 例: (E)是EditView,所有视图的父级 (M)是MenuViewEditView的子视图 (B)是ButtonViewMenuView的子视图 图解: +------------------------------+ |E | | | | | | | | | |+-----+ | ||B | | |+-----+ | |+----------------------------+| ||M || || || |+----------------------------+| +------------------------------+ 因为(B)在(M)的框架之外,所以(B)区域中的轻击将永远不会发送到(M)-实际上,在这种情况下(M)绝不会分析触摸,并且将触摸发送到层次结构中的下一个对象。 目标:我认为重写hitTest:withEvent:可以解决此问题,但我不完全知道该怎么做。就我而言,应该hitTest:withEvent:在EditView(我的“主”超级视图)中覆盖?还是应将其覆盖MenuView,不接受触摸的按钮的直接视图?还是我在想这个错误? 如果这需要冗长的解释,那么很好的在线资源将对您有所帮助-苹果公司的UIView文档除外,但我对此并不清楚。 谢谢!