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

问题描述:

我在添加长按手势到我的UITableView时遇到问题。好吧,从技术上讲,我确实有一个长按手势识别器,但我将最小抽头持续时间设置为0.08。我这样做是因为我想要采用相同的一般操作来轻敲和按住单元格,但操作仅根据单元格被占用多长时间而改变。总之,这里是我添加了手势识别(在viewDidLoad)代码:长按手势识别器在UITableView中滚动干扰

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()功能,我得到那里有一个长按,然后得到了的tableView细胞的CGPoint。所以基本上,如果我快速滚动,(如我轻弹屏幕),表视图滚动罚款。如果我尝试慢慢滚动,那么长按事件就会触发,我无法滚动。

我想要做的就是能够缓慢滚动,我希望桌面默认滚动手势覆盖任何长按。

谢谢!

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

+0

这正好解决这个问题,但现在长按失败不管。任何想法如何解决这一问题? – codeforfood 2015-04-01 00:38:04

+0

也许你可以用相反的方法做到这一点,只有在长按失败时才告诉scrollView的识别器才会触发。 – EmilioPelaez 2015-04-01 16:03:11

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

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

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