项目中我们经常会用到弹框,如京东客服的订单功能,底部一个半透明view,view上添加一个tableview。点击tableviewcell发送订单消息,点击底部半透明view,回收弹框。
但是如果给view添加tap事件后,我们会发现cell的点击事件没有相应。这是因为tap点击事件与cell点击事件发生冲突。我们需要给tap添加代理,遵循协议。并且在协议方法中判断,当前点击的是哪个控件,如果是cell就返回no,如果是底部view就返回yes
//遵循协议
@interface MJConversationPopView ()<UIGestureRecognizerDelegate>
UITapGestureRecognizer *tap = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(close)];
//设置代理
tap.delegate = self;
[self addGestureRecognizer:tap];
- (BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldReceiveTouch:(UITouch *)touch {
// 点击了tableViewCell,view的类名为UITableViewCell,则不接收Touch点击事件
if ([touch.view isKindOfClass:[UITableViewCell class]]) {
return NO;
}
return YES;
}