您的位置:首页 > 移动开发 > IOS开发

iOS 回收键盘时拦截其他点击方法解决办法

2016-04-26 11:16 567 查看

我们在项目中一般会用到textfield和tableview等,最近我遇到一个问题,当我们在写手势把键盘回收时,tableview的dissected...点击方法不会进去,查了下资料发现是因为手势的点击方法把我们tableview的点击方法拦截了,下面我教大家两种解决的办法

方法1:
创建一个手势,记得遵守协议方法

 UITapGestureRecognizer *tap = [[UITapGestureRecognizer
alloc]initWithTarget:self
action:@selector(action_taskTap)];
    tap.delegate =
self;
    [self.view
addGestureRecognizer:tap];
下面我们重写手势方法:

- (BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldReceiveTouch:(UITouch
*)touch{
    NSLog(@"%@",NSStringFromClass([touch.view
class]));
    if ([NSStringFromClass([touch.view
class])
isEqualToString:@"UITableViewCellContentView"])
{//如果是点击的是tableview,return NO
        return
NO;
    }
    return
YES;
}

实现方法

- (void)action_taskTap{
    [self.view
endEditing:YES];
}

方法2:
首先,我们要知道,键盘弹出和收回是两个通知来完成的

[[NSNotificationCenter
defaultCenter] addObserver:self
selector:@selector(keyboardWillShow:)
name:UIKeyboardWillShowNotification
object:nil];弹出

 [[NSNotificationCenter
defaultCenter] addObserver:self
selector:@selector(keyboardWillHide:)
name:UIKeyboardWillHideNotification
object:nil];收回

然后实现通知方法

- (void)keyboardWillShow:(NSNotification *)notice {
在弹出键盘的通知方法里面我们添加一个背景我淡黑的透明view,然后在view上面加上一个手势
    self.keyView = [[UIView
alloc]initWithFrame:self.view.frame];
    self.keyView.backgroundColor = [UIColor
colorWithWhite:0.2
alpha:0.3];
    [self.view
addSubview:self.keyView];
    UITapGestureRecognizer *tap = [[UITapGestureRecognizer
alloc]initWithTarget:self
action:@selector(action_sendTap)];
    tap.delegate =
self;
    [self.keyView
addGestureRecognizer:tap];
}

实现手势方法

- (void)action_sendTap{
    for (UIView *view
in self.view.subviews) {
        [view endEditing:YES];
    }
}

- (void)keyboardWillHide:(NSNotification *)notice {
移除这个view
    [self.keyView
removeFromSuperview];
}

综上,我比较推荐第二种方法
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息