當前位置:編程學習大全網 - 源碼下載 - iOS 解決 tableview 或 collectionview 事件響應 與 手勢響應的 沖突

iOS 解決 tableview 或 collectionview 事件響應 與 手勢響應的 沖突

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;

}

想要的效果 :既觸發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;

}

}

  • 上一篇:wpf 如何實現窗口恢復按鈕變灰
  • 下一篇:福建有哪些優良的港口?
  • copyright 2024編程學習大全網