我想弄清楚如何完成正確的方式。我試圖描繪的情況: UIGestureRecognizer塊子視圖處理觸摸事件
我加入一個UITableView
作爲UIView
的子視圖。 UIView
響應tap和pinchGestureRecognizer
,但是當這樣做時,tableview停止對這兩個手勢作出反應(它仍然對滑動作出反應)。
我已經使它與下面的代碼一起工作,但它顯然不是一個很好的解決方案,我相信有更好的方法。這是擺在UIView
(SuperView把):
-(UIView *)hitTest:(CGPoint)point withEvent:(UIEvent *)event {
if([super hitTest:point withEvent:event] == self) {
for (id gesture in self.gestureRecognizers) {
[gesture setEnabled:YES];
}
return self;
}
for (id gesture in self.gestureRecognizers) {
[gesture setEnabled:NO];
}
return [self.subviews lastObject];
}
我喜歡這個解決方案最大,因爲它不涉及弄亂觸摸,'hitTest:withEvent:'或'pointInside:withEvent:'。 – DarkDust 2011-07-25 10:26:20
乾淨的解決方案,您可以使用例如'return!(touch.view == givenView);'如果你只是想排除一個給定的視圖或'返回!(touch.view.tag == kTagNumReservedForExcludingViews);'當你想停止你的識別器處理觸摸整個一堆不同的子視圖。 – cate 2012-12-29 22:40:48
我會用' - (BOOL)isDescendantOfView:(UIView *)view'做命中測試。這在' - (void)touchesBegan:(NSSet *)與UIEvent:(UIEvent *)事件'在UISestureRecognizer的子類中觸及時也可以正常工作。 – Christoph 2013-03-13 22:27:13