iOS键盘弹起来 collectionitem不响应点击行事件

由于本项目里面基类封装的是键盘弹起  点击屏幕任何一处响应tap事件让编辑完成 键盘消失

- (void) backgroundTapDismissKeyboard:(UIGestureRecognizer *) gestureRecognizer{

    //将self.view里所有的subview的first responder 都resign掉

    [self.view endEditing:YES];

}

最近产品要求键盘弹起的时候 加个历史记录 ,历史记录还可以无限滚动 ,删除等

想着用UICollectionView ,方便各种操作,后来点击传值到输入框的时候出现个诡异事件,collectionView:(UICollectionView *)collectionView didSelectItemAtIndexPath:(NSIndexPath *)indexPath  方法没有响应,经过查到 ,事件确实被阻挡了,后来的解决方案是

解决方案1.

通过tap属性获取点击位置 判断point是否在_collectionCell上 在就执行didSelectItem方法(手动调用)

 

- (void)collectionViewClickAction:(UITapGestureRecognizer *)tap{

    

    CGPoint point = [tap locationInView:_collectionViewDeatil];

    //根据点获取点击的是哪一个  这个经典

    NSIndexPath *index = [_collectionViewDeatil indexPathForItemAtPoint:point];

    if (index != nil) {

        _isInputBussinessName=NO;

        [self collectionView:_collectionViewDeatil didSelectItemAtIndexPath:index];

    }

    //    [self.view endEditing:YES];

    

    

}

 

 

解决方案2.

通过代理方法判断_collection是不是第一响应者(事件传递由上至下) 如果不是就拦截tap手势

- (BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldReceiveTouch:(UITouch *)touch {
    if (touch.view != _collection) {
        [_titleT resignFirstResponder];
        [contentTV resignFirstResponder];
        return NO;
    }
    return YES;
}

原理是把阻挡的事件取消响应,使得代理方法执行。

 

前提是给视图加入tap事件(第一种 //    UITapGestureRecognizer *tap = [[UITapGestureRecognizer alloc]initWithTarget:self action:@selector(collectionViewClickAction:)];  

第二种    UITapGestureRecognizer *tap = [[UITapGestureRecognizer alloc]init];)

//    // 为collectionView添加手势,点击回收键盘  

//    UITapGestureRecognizer *tap = [[UITapGestureRecognizer alloc]initWithTarget:self action:@selector(collectionViewClickAction:)];

    UITapGestureRecognizer *tap = [[UITapGestureRecognizer alloc]init];

    // 利用代理方法解决后边手势与item点击事件之间的冲突

    tap.delegate = self;

    [_collectionViewDeatil addGestureRecognizer:tap];

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值