长按住TableView时cell上面的button点击事件被延

2019-04-26  本文已影响0人  LD_左岸

问题
UIScrollView的gestureRecognizers

    "<UIScrollViewDelayedTouchesBeganGestureRecognizer: 0x6000014da300; state = Possible; delaysTouchesBegan = YES; view = <UIScrollView 0x7fd579823600>; target= <(action=delayed:, target=<UIScrollView 0x7fd579823600>)>>",

    "<UIScrollViewPanGestureRecognizer: 0x7fd577e17180; state = Possible; delaysTouchesEnded = NO; view = <UIScrollView 0x7fd579823600>; target= <(action=handlePan:, target=<UIScrollView 0x7fd579823600>)>>",

    "<_UIDragAutoScrollGestureRecognizer: 0x6000011ae220; state = Possible; cancelsTouchesInView = NO; delaysTouchesEnded = NO; view = <UIScrollView 0x7fd579823600>; target= <(action=_handleAutoScroll:, target=<UIScrollView 0x7fd579823600>)>>"
)

UITableView的gestureRecognizers

(
    "<UIScrollViewDelayedTouchesBeganGestureRecognizer: 0x2808d1c00; state = Possible; delaysTouchesBegan = YES; view = <LDTableView 0x112819600>; target= <(action=delayed:, target=<LDTableView 0x112819600>)>>",

    "<UIScrollViewPanGestureRecognizer: 0x111e0ff80; state = Possible; delaysTouchesEnded = NO; view = <LDTableView 0x112819600>; target= <(action=handlePan:, target=<LDTableView 0x112819600>)>>",

    "<_UIDragAutoScrollGestureRecognizer: 0x280ddc460; state = Possible; cancelsTouchesInView = NO; delaysTouchesEnded = NO; view = <LDTableView 0x112819600>; target= <(action=_handleAutoScroll:, target=<LDTableView 0x112819600>)>>",

    "<_UISwipeActionPanGestureRecognizer: 0x111d09e40; state = Possible; view = <LDTableView 0x112819600>; target= <(action=_swipeRecognizerDidRecognize:, target=<UISwipeHandler 0x281fde370>)>>",

    "<UISwipeDismissalGestureRecognizer: 0x280bdc690; state = Possible; enabled = NO; delaysTouchesBegan = YES; view = <LDTableView 0x112819600>; target= <(action=_dismissalRecognizerDidRecognize:, target=<UISwipeHandler 0x281fde370>)>>"
)

最终发现 这个_UISwipeActionPanGestureRecognizer手势挺有意思

怎么有意思呢 就是你摁住tableView的时候 再点tableViewCell上的button 你会发现button的点击事件 被延迟处理了 C8DBA38F80BCDB887244A6E1E6B8B2A8.png

测试方法:

可以摁住微信的我的界面 点上面蓝色区域 发现push的action被延迟处理了 当你狂点几次之后 松开摁住tableView的手后 你刚才点了几次 就会执行几次push操作

或者你摁住tableView的时候 你会发现 tableViewCell的点击方法也被延迟处理了

现象

当然了 你如果在初始化tableView的时候 删除掉这个手势 也就是这么写

NSMutableArray *newges = [NSMutableArray arrayWithArray:_tableView.gestureRecognizers];
        for (int i =0; i<[newges count]; i++) {
            NSString * className = [NSString stringWithFormat:@"%@",[[newges objectAtIndex:i] class]];
            
            if ([className isEqualToString:@"_UISwipeActionPanGestureRecognizer"]) {
                [_tableView removeGestureRecognizer:[newges objectAtIndex:i]];
            }
        }

你会发现当你摁住tableView 或者摁住tableView的indexpath.row == 10的cell 再点indexpath.row == 7的cell时 发现这个cell的点击事件就不能响应了
当然了对应的indexpath.row == 7的cell上面的button的点击事件是可以及时响应的.....

上一篇 下一篇

猜你喜欢

热点阅读