一 : view添加手勢與tableView沖突問題
** 問題: ** 在UIView界面中的部分區域添加tableView,tableViewCell能正常點擊,但是對該view添加點擊手勢,界面只識別點擊手勢,而不能正常操作tableViewCell
抽屜效果.png
解決方法:
1. 遵守代理協議
UIGestureRecognizerDelegate
2. 給手勢設置代理
UITapGestureRecognizer *tap = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(respondsToTapGesture:)];
tap.delegate = self;
[self.view addGestureRecognizer:tap];
3.實現代理方法
- (BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldReceiveTouch:(UITouch *)touch {
// 點擊的view的類名
NSLog(@"%@", NSStringFromClass([touch.view class]));
// 點擊了tableViewCell,view的類名為UITableViewCellContentView,則不接收Touch點擊事件
if ([NSStringFromClass([touch.view class]) isEqualToString:@"UITableViewCellContentView"]) {
return NO;
}
return YES;
}
二 : view添加手勢和collectionView的沖突問題
想要的效果 : 既觸發didSelectItemAtIndexPath方法,又能在CollectionView自身上處理TapGesture
問題 : collectionView沒有內容視圖, 不能像上面那樣解決沖突
解決方法 :
1. 遵守代理協議
UIGestureRecognizerDelegate
2. 給手勢設置代理
UITapGestureRecognizer *tapGestureRecognizer = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(cancelDelete)];
apGestureRecognizer.delegate = self; [注意點]
[self.collectionview addGestureRecognizer:tapGestureRecognizer];
3. self要實現UIGestureRecognizerDelegate協議,其中就有gestureRecognizer:shouldReceiveTouch:方法
- (BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldReceiveTouch:(UITouch *)touch {
if (touch.view != self.collectionView) {
return NO;
}else {
return YES;
}
}