最近為了解決 點擊子視圖卻依然會響應父試圖的點擊事件發現UITapGestureRecognizer上的一個代理方法:
-(BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldReceiveTouch:(UITouch *)touch
如果返回no則不響應,因此我們可以根據isDescendantOfView:方法來判定一個視圖是否在其父視圖的視圖層中。把我們不想讓其響應的子視圖拿出來判斷一下,如果包含這個子視圖就返回no,否則就是yes。
具體寫法:
UITapGestureRecognizer *tap = [[UITapGestureRecognizer alloc]initWithTarget:self
action:@selector(removeSubviews)];
tap.delegate = self;
self.userInteractionEnabled = YES;
[self.alpha_back_view addGestureRecognizer:tap];
-(BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldReceiveTouch:(UITouch *)touch{
if ([touch.view isDescendantOfView:self.tableView_back_view]) {
return NO;
}
return YES;
}