场景一、tableviewcell可以触发点击,同时tableview的父视图有点击识别,cell的点击会很难被识别到
解决1:方法在GestureRecgnizer代理方法里面区分手势。
解决2:在cell上再添加一个手势识别,这样会先识别cell上面的手势
- (void)viewDidLoad {
[super viewDidLoad];
UITapGestureRecognizer *tap = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(tap:)];
tap.delegate = self;
[self.view addGestureRecognizer:tap];
}
#pragma mark tapGestureRecgnizerdelegate 解决手势冲突
- (BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldReceiveTouch:(UITouch *)touch {
if ([touch.view isKindOfClass:[UITableView class]]){
return NO;
}
if ([NSStringFromClass([touch.view class]) isEqualToString:@"UITableViewCellContentView"]) {
return NO;
}
return YES;
}
场景2:禁用右滑返回
解决1:
-(void)viewDidAppear:(BOOL)animated{
if ([self.navigationController respondsToSelector:@selector(interactivePopGestureRecognizer)]) {
self.navigationController.interactivePopGestureRecognizer.enabled = NO;
}
}
-(void)viewWillDisappear:(BOOL)animated{
self.navigationController.interactivePopGestureRecognizer.enabled = YES;
}
解决2:流程:先设置代理---->重写手势操作方法,
-(void)viewDidAppear:(BOOL)animated{
self.navigationController.interactivePopGestureRecognizer.delegate = self;
}
-(void)viewWillDisappear:(BOOL)animated{
self.navigationController.interactivePopGestureRecognizer.delegate = nil;
}
- (BOOL)gestureRecognizerShouldBegin:(UIGestureRecognizer
*)gestureRecognizer{
return NO; //YES:允许右滑返回 NO:禁止右滑返回
}
场景3、requireGestureRecognizerToFail,指定某一个 recognizer,即便自己已经滿足條件了,也不會立刻触发,会等到该指定的 recognizer 确定失败之后才触发。
UITapGestureRecognizer* singleRecognizer;
singleRecognizer = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(handleSingleTapFrom)];
singleRecognizer.numberOfTapsRequired = 1; // 单击
[self.view addGestureRecognizer:singleRecognizer];
// 双击的 Recognizer
UITapGestureRecognizer* doubleRecognizer;
doubleRecognizer = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(handleDoubleTapFrom)];
doubleRecognizer.numberOfTapsRequired = 2; // 双击
[self.view addGestureRecognizer:doubleRecognizer];
// 关键在这一行,如果双击确定偵測失败才會触发单击
[singleRecognizer requireGestureRecognizerToFail:doubleRecognizer];
网友评论