2

我正在为使用自定义 UITableViewCell 子类的 UITableView 处理自定义滑动事件。我UIGestureRecognizerDelegate在我的标题中包含了viewDidLoad:

UISwipeGestureRecognizer *swipeLeft = [[UISwipeGestureRecognizer alloc] initWithTarget:self action:@selector(didSwipe:)];
swipeLeft.direction = UISwipeGestureRecognizerDirectionLeft;
swipeLeft.numberOfTouchesRequired = 1;
[self.tableView addGestureRecognizer:swipeLeft];

我的 swipeLeft 方法如下所示:

-(void)didSwipe:(UISwipeGestureRecognizer *)recognizer {

    if (recognizer.state == UIGestureRecognizerStateEnded)
    {
        CGPoint swipeLocation = [recognizer locationInView:self.tableView];
        NSIndexPath *swipedIndexPath = [self.tableView indexPathForRowAtPoint:swipeLocation];
        NSDictionary *clip = [self.clips objectAtIndex:swipedIndexPath.row];
        NSLog(@"Swiped!");


    }
}

这是一种工作,但滑动必须非常精确。几乎不可能精确。

我几乎通过使用 UIPanGestureRecognizer 来让它工作,但不幸的是,它与使用全局平移手势识别器的全局侧抽屉组件(感兴趣的人为 ECSlidingViewController)并没有很好地配合。

有没有办法解决?任何帮助将不胜感激,因为我一直在谷歌搜索和浏览 SO 几个小时以寻找解决方案。

4

2 回答 2

8

正如Kolin Krewinkel在 Twitter 上指出的那样,实现这 2 个委托方法就可以了:

-(BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldRecognizeSimultaneouslyWithGestureRecognizer:(UIGestureRecognizer *)otherGestureRecognizer
{
    return YES;
}

- (BOOL)gestureRecognizerShouldBegin:(UIGestureRecognizer *)gestureRecognizer
{
    return YES;
}
于 2013-04-09T01:53:43.063 回答
0

我在 UITableView 上使用 ECSlidingViewController 和滑动删除时遇到了类似的问题(在我的案例中,顶视图控制器向左滑动以显示菜单)。

panGesture我通过向我的默认属性添加一个委托来解决问题,ECSlidingViewController如果滑动从屏幕的最右侧边缘开始,则仅拉入菜单:

-(BOOL)gestureRecognizerShouldBegin:(UIGestureRecognizer *)gestureRecognizer
{
  if ([gestureRecognizer locationInView:gestureRecognizer.view].x > ([UIScreen mainScreen].bounds.size.width - 60.0))
  {
    return YES;
  }
return NO;
}
于 2014-11-28T05:49:15.340 回答