iOS手勢沖突

首先添加UIGestureRecognizerDelegate協(xié)議,然后把 Tap手勢識別對象設(shè)置代理self,然后實現(xiàn)如下代碼:

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

if ([touch.view isKindOfClass:[UIButton class]]){

return NO;

}


// 若為UITableViewCellContentView(即點擊了tableViewCell),則不截獲Touch事件

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

return?NO;

}

return??YES;

}


兩個控件之間的手勢沖突

我在一個橫向滾動的scrollview里面加了一個豎向滾動的tableview,這時如果實現(xiàn)了scrollview的代理方法卻沒有區(qū)分scrollview和tableview,這時候tableview的滾動會發(fā)生混亂。解決方法是在didScroll代理方法里區(qū)分這兩個。

#pragma mark - scrollView delegate

-(void)scrollViewDidScroll:(UIScrollView *)scrollView{

if ([scrollView isKindOfClass:[UITableView class]]) {

// NSLog(@"------是列表---");

}

else {

// NSLog(@"------是滾動試圖----");

}

}


UIScrollView和子視圖TableView的cell右滑刪除沖突

橫向滾動的scrollview里面有一個子視圖tableview,tableview的cell右右滑沖突,除非手指激活tracking停留一會兒,否則無法激活右滑刪除。

解決辦法類似上面的,scrollview的左右滑依舊是由UIPanGesturerRecognizer控制的,但是該手勢的代理無法更改

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

{

//NSLog(@"手勢觸發(fā)的類=%@",NSStringFromClass([touch.view class]));

// 若為UITableViewCellContentView(即點擊了tableViewCell),則不截獲Touch事件

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

return NO;

}

return YES;

}

-(BOOL)gestureRecognizerShouldBegin:(UIGestureRecognizer *)gestureRecognizer

{

// 若為UITableViewCellContentView(即點擊了tableViewCell),則不截獲Touch事件

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

return NO;

}

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)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

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

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