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



我们在项目中一般会用到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];

}


综上,我比较推荐第二种方法






  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值