IQKeyboardManager 引起手势冲突 导致tableview无法点击

因为 stemLabel 里面自己本来就有手势, 然后又添加了IQKeyboardManager, 导致二者手势冲突.

在添加 IQKeyboardManager 的VC上点击 textField,然后输入文字
输入以后, stemLabel 的dropdownview 展开的tableview 无法点击, 导致其他界面的tableview也无法点击

解决方法 1

去掉这句代码 manager.shouldResignOnTouchOutside
代码如下

-(void)viewDidAppear:(BOOL)animated
{

    [super viewDidAppear:animated];


    IQKeyboardManager *manager = [IQKeyboardManager sharedManager];

    _isKeyboardManagerEnabled = manager.isEnabled;

    manager.enable = YES;
    //manager.shouldResignOnTouchOutside = YES;
}


-(void)viewWillDisappear:(BOOL)animated
{
    [super viewWillDisappear:animated];

    [[IQKeyboardManager sharedManager] setEnable:_isKeyboardManagerEnabled];
}


解决方法 2

或者在 IQKeyboardManager 添加代码


-(BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldReceiveTouch:(UITouch *)touch method, adding code

    if ([NSStringFromClass([touch.view class]) isEqualToString:@"UITableViewCellContentView"]) {
        return NO;
    }

像这样修改


/** To not detect touch events in a subclass of UIControl, these may have added their own selector for specific work */
-(BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldReceiveTouch:(UITouch *)touch
{
    if ([NSStringFromClass([touch.view class]) isEqualToString:@"UITableViewCellContentView"]) {
        return NO;
    }
    //  Should not recognize gesture if the clicked view is either UIControl or UINavigationBar(<Back button etc...)    (Bug ID: #145)
    return ([[touch view] isKindOfClass:[UIControl class]] || [[touch view] isKindOfClass:[UINavigationBar class]]) ? NO : YES;
}


最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容