今天遇到单击手势与cell点击事件冲突,导致cell点击没有反应的问题,直接上代码!
解决方法如下:
OC语法:
UITapGestureRecognizer *tap=[[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(tapClick)];
tap.delegate=self;
[self.view addGestureRecognizer:tap];
#pragma mark-手势代理,解决和tableview点击发生的冲突
-(BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldReceiveTouch:(UITouch *)touch {
if ([NSStringFromClass([touch.view class]) isEqualToString:@"UITableViewCellContentView"]) {//判断如果点击的是tableView的cell,就把手势给关闭了
return NO;//关闭手势
}//否则手势存在
return YES;
}
let tap = UITapGestureRecognizer(target: self, action: #selector(removeView))
self.addGestureRecognizer(tap)
tap.delegate = self
func gestureRecognizer(_ gestureRecognizer: UIGestureRecognizer, shouldReceive touch: UITouch) -> Bool {
if String(describing: touch.view!.classForCoder) == "UITableViewCellContentView" {
return false
}
else {
return true
}
}
特别注意的是swift语法中的可选类型Optional,
String(describing: touch.view!.classForCoder) == "UITableViewCellContentView"
这里一定要用!,如果是
String(describing: touch.view?.classForCoder)
那么打印输出会是可选类型
Optional("UITableViewCellContentView")