重寫系統(tǒng)側(cè)滑返回到棧中界面導(dǎo)致滑動視圖不能滑動視圖

項目里面有個需求, 需要重寫系統(tǒng)側(cè)滑, 返回過去的側(cè)滑手勢導(dǎo)致跟原界面tableView發(fā)生了手勢沖突, tableView不能進(jìn)行上下滑動

UIScreenEdgePanGestureRecognizer 屏幕側(cè)滑手勢

重寫系統(tǒng)側(cè)滑代碼如下:
首先遵循navigationController側(cè)滑代理<UIGestureRecognizerDelegate>;

 self.navigationController.interactivePopGestureRecognizer.delegate = self;

之后:

- (BOOL)gestureRecognizerShouldBegin:(UIGestureRecognizer *)gestureRecognizer ;

這個代理協(xié)議是: 手勢剛開始發(fā)生時, 需不需要響應(yīng), 這里設(shè)置為NO。

- (BOOL)gestureRecognizerShouldBegin:(UIGestureRecognizer *)gestureRecognizer {

   側(cè)滑返回需要的需求action
    return NO;    
}

tableView也是一種滑動視圖(UIScrollView), 默認(rèn)遵循兩種手勢
UIPanGestureRecognizer, UIPinchGestureRecognizer

重寫系統(tǒng)的側(cè)滑返回到原界面之后, tableView發(fā)現(xiàn)滑動手勢被禁止了, 那么這是由于系統(tǒng)的側(cè)滑手勢跟tableView自帶手勢沖突了, 導(dǎo)致tableview無法正常滑動!
解決方案:

//返回YES表示支持多個手勢同時觸發(fā),否則不允許多個手勢同時觸發(fā),  otherGestureRecognizer是UITableView的UIPanGestureRecognizer手勢,  gestureRecognizer是UIScreenEdgePanGestureRecognizer
- (BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldRecognizeSimultaneouslyWithGestureRecognizer:(UIGestureRecognizer *)otherGestureRecognizer {
// 也可以這種寫法  [otherGestureRecognizer isKindOfClass:[UIPanGestureRecognizer class]  
    if ([otherGestureRecognizer.view isKindOfClass:[UITableView class]]) {  
        return YES;  
    }  
    return NO;  
}

可能還有的朋友碰到也是在tableView上加tap手勢導(dǎo)致cell點擊手勢無效
解決辦法如下:

-(BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldReceiveTouch:(UITouch *)touch {
    if ([NSStringFromClass([touch.view class]) isEqualToString:@"UITableViewCellContentView"]) {//判斷如果點擊的是tableView的cell,就把手勢給關(guān)閉了
        return NO;//關(guān)閉手勢
    }//否則手勢存在
    return YES;
}

PS: 日積月累, 天天進(jìn)步!
--END--

最后編輯于
?著作權(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)容