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


最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容