- 控件过滤:有些控件需要响应手势有些不需要
UITapGestureRecognizer *tapGr = [[UITapGestureRecognizer alloc]initWithTarget:self action:@selector(hideKeyboardAction)];
tapGr.delegate = self; //设置代理
[self.view addGestureRecognizer:tapGr];
代理方法中过滤:
#pragma mark tableView和手势冲突的解决方法
- (BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldReceiveTouch:(UITouch *)touch{
if ([touch.view isKindOfClass:[UITextField class]]){
return NO;
}
// 若为UITableViewCellContentView(即点击了tableViewCell),则不截获Touch事件
// NSLog(NSStringFromClass([touch.view class]));
if ([NSStringFromClass([touch.view class]) isEqualToString:@"UITableViewCellContentView"]) {
return NO;
}
return YES;
}
- collectionViewCell点击不需要响应手势,点击其他需要收键盘
- (BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldReceiveTouch:(UITouch *)touch {
//不获取事件
if (touch.view != self.collectionView){
return NO;
}
return YES;
}
- (void)hideKeyboardAction{
[self.view endEditing:YES];
}