項目里面有個需求, 需要重寫系統(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--