iOS 解決 tableview 或 collectionview 事件響應(yīng) 與 手勢響應(yīng)的 沖突

一.tableview 沖突問題

1. 遵守代理協(xié)議? UIGestureRecognizerDelegate

2. 給手勢設(shè)置代理

UITapGestureRecognizer *tap = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(respondsToTapGesture:)];

tap.delegate = self;

[self.view addGestureRecognizer:tap];

3.實(shí)現(xiàn)代理方法

- (BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldReceiveTouch:(UITouch *)touch {

// 點(diǎn)擊的view的類名

NSLog(@"%@", NSStringFromClass([touch.view class]));

// 點(diǎn)擊了tableViewCell,view的類名為UITableViewCellContentView,則不接收Touch點(diǎn)擊事件

if ([NSStringFromClass([touch.view class]) isEqualToString:@"UITableViewCellContentView"]) {

return NO;

}

return? YES;

}

二 collectionview 沖突問題

想要的效果 :既觸發(fā)didSelectItemAtIndexPath方法,又能在CollectionView自身上處理TapGesture

問題 : collectionView沒有內(nèi)容視圖, 不能像上面那樣解決沖突

解決方法 :

1. 遵守代理協(xié)議 ? ?UIGestureRecognizerDelegate

2. 給手勢設(shè)置代理

UITapGestureRecognizer *tapGestureRecognizer = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(cancelDelete)];

apGestureRecognizer.delegate = self;? [注意點(diǎn)]

[self.collectionview addGestureRecognizer:tapGestureRecognizer];

3. self要實(shí)現(xiàn)UIGestureRecognizerDelegate協(xié)議,其中就有g(shù)estureRecognizer:shouldReceiveTouch:方法

- (BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldReceiveTouch:(UITouch *)touch {

if (touch.view != self.collectionView) {

return NO;

}else {

return YES;

}

}

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容