我有一个UITableView
作为subview
的视图,它完全覆盖了父视图。当我尝试为父视图实现touchesBegan
时,我注意到该方法根本没有被调用。无论如何都要覆盖这种行为?
答案 0 :(得分:12)
实际上有一种方法可以覆盖这种行为。您需要扩展阻止父视图的每个子对象,并覆盖touchesBegan
方法,如下所示:
-(void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event {
[super touchesBegan:touches withEvent:event];
[self.nextResponder touchesBegan:touches withEvent:event];
}
例如,如果在UIVcrollView中有一个UIButton,它位于UIView内,那么你需要创建两个自定义类。一个扩展UIButton和其他扩展UIScrollView。在每个自定义类中,您需要添加上述方法定义。完成这些更改后,您将能够在父UIView中收到touchesBegan
事件。
答案 1 :(得分:3)
touchesBegan
方法与父视图的框架有关。如果父视图看不到框架并且subviews
完全包围该框架,则父视图将不会接收到触摸。
答案 2 :(得分:1)
您也可以设置:
[theViewThatIsCoveringParent setUserInteractionEnabled:NO];
这样所有接触都会被父母抓住。
答案 3 :(得分:0)
执行此操作:Why isn't my UIViewController in the responder chain for its view?
简而言之:
nextResponderPlusSomething
的属性(已有nextResponder
),此内容正在接触viewdidload
中将此属性设置为控制器(自我)touchesBegan
内添加对nextResponderPlusSomething:touchesBegan