长按手势识别器干扰UITableView中的滚动



在UITableView中添加长按手势时遇到问题。从技术上讲,我确实有一个长按手势识别器,但我将最短敲击持续时间设置为0.08。我这样做是因为我想对敲击和按住单元格有同样的一般动作,但动作只会根据单元格的按住时间而改变。无论如何,这是我添加手势识别器的代码(在viewDidLoad中):

    var longPress:UILongPressGestureRecognizer = UILongPressGestureRecognizer(target: self, action: "handleLongPress:")
    longPress.minimumPressDuration = 0.08
    longPress.delegate = self
    longPress.cancelsTouchesInView  = false
    self.tableView.addGestureRecognizer(longPress)
    self.tableView.panGestureRecognizer.requireGestureRecognizerToFail(longPress)

在我的handleLongPress()函数中,我得到了长按的CGPoint,然后从中得到tableView单元格。

所以基本上,如果我快速滚动(就像我轻弹屏幕一样),表视图会滚动得很好。如果我尝试缓慢滚动,长按事件会触发,我无法滚动。

我所想做的就是能够缓慢滚动,我希望tableviews默认的滚动手势可以覆盖任何长按。

谢谢!

ScrollViews有一个panGestureRecognizer属性,您可以在长按识别器上使用scrollView的panGestureRecognizer作为参数调用requireGestureRecognizerToFail,并且只有在滚动视图中的平移手势失败时才会触发。

此类别可能会解决您的问题:

@interface UITableView (CellSwipeAdditions)
- (BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldRecognizeSimultaneouslyWithGestureRecognizer:(UIGestureRecognizer *)otherGestureRecognizer;
@end
@implementation UITableView (CellSwipeAdditions)
    - (BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldRecognizeSimultaneouslyWithGestureRecognizer:(UIGestureRecognizer *)otherGestureRecognizer {
        return YES;
    }
@end

最新更新