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

6

我在为我的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单元格。
因此,基本上,如果我快速滚动(例如,如果我轻弹屏幕),则表视图会正常滚动。如果我尝试缓慢滚动,则长按事件会触发,我就无法滚动。
我想做的只是能够缓慢滚动,我希望表格视图默认的滚动手势覆盖任何长按。
谢谢!
2个回答

1
滚动视图具有一个名为 panGestureRecognizer 的属性,您可以使用 scrollView 的 panGestureRecognizer 作为参数调用 requireGestureRecognizerToFail 来处理您的长按手势识别器,它只会在滚动视图中的平移手势失败时触发。

这解决了问题,但现在无论如何长按都失败了。有什么想法可以修复吗? - codeforfood
也许你可以换个方式,告诉scrollView的识别器只有在长按失败时才触发。 - EmilioPelaez

0

这个分类可能会解决您的问题:

@interface UITableView (CellSwipeAdditions)
- (BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldRecognizeSimultaneouslyWithGestureRecognizer:(UIGestureRecognizer *)otherGestureRecognizer;
@end

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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接