长按住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手势挺有意思

测试方法:
可以摁住微信的我的界面 点上面蓝色区域 发现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的点击事件是可以及时响应的.....