美文网首页
IQKeyboardManager 引起手势冲突 导致table

IQKeyboardManager 引起手势冲突 导致table

作者: okerivy | 来源:发表于2017-07-22 18:10 被阅读23次

    因为 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;
    }
    
    

    相关文章

      网友评论

          本文标题:IQKeyboardManager 引起手势冲突 导致table

          本文链接:https://www.haomeiwen.com/subject/fwbukxtx.html