UITableView的滑动手势与UITableViewCell的滑动手势冲突问题

7
以下是我编写的代码,用于在UITableView上进行双指滑动:
UISwipeGestureRecognizer *leftSwipe = [UISwipeGestureRecognizer new];
[leftSwipe addTarget:self action:@selector(nextDay)];
leftSwipe.numberOfTouchesRequired = 2;
leftSwipe.direction = UISwipeGestureRecognizerDirectionLeft;
leftSwipe.delegate = self;
[leftSwipe setCancelsTouchesInView:YES];
[tableViewTasks addGestureRecognizer:leftSwipe];

UISwipeGestureRecognizer *rightSwipe = [UISwipeGestureRecognizer new];
[rightSwipe addTarget:self action:@selector(previousDay)];
rightSwipe.numberOfTouchesRequired = 2;
rightSwipe.direction = UISwipeGestureRecognizerDirectionRight;
rightSwipe.delegate = self;
[rightSwipe setCancelsTouchesInView:YES];
[tableViewTasks addGestureRecognizer:rightSwipe];  

我正在使用SWTableViewCell,它具有左右(单击)手势识别器。
当使用2个手指向左/向右滑动UITableView时,SWTableViewCell的左右手势也会触发。
如何停止冲突?


如果可以通过使用手势委托解决,只需查看此先前的答案并找出解决方法。 - vaibhav
返回 YES;
  • (BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldRecognizeSimultaneouslyWithGestureRecognizer:(UIGestureRecognizer *)otherGestureRecognizer{ return YES; }
- Himanshu Moradiya
@HimanshuMoradiya:我已经做过了,但仍然遇到了问题。 - Nitish
@Nitish,你上传了任何展示你问题的GIF或视频吗? - Himanshu Moradiya
@HimanshuMoradiya:让我试试。 - Nitish
@Nitish,为什么不禁用TableView中的行编辑呢?这将阻止滑动手势检测到任何东西。 - Swati
3个回答

1

1. 在你的UIViewController中实现UIGestureRecognizerDelegate

2. 设置leftSwipe.delegate = self;rightSwipe.delegate = self;

3. 现在在其委托方法中检查UISwipeGesture是否有多少numberOfTouchesRequired

 -(BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldReceiveTouch:(UITouch *)touch
    {
    if ( [gestureRecognizer isMemberOfClass:[UISwipeGestureRecognizer class]] ) {

    UISwipeGestureRecognizer  *swipeGesture=(UISwipeGestureRecognizer *)gestureRecognizer ;

    if(swipeGesture.numberOfTouchesRequired!=2)
     {    
    //if Double not Double Swipe Touch Don't Linsten Gesture in your Viewcontroller
     return NO;
      }
     }

        return YES; 
    }

我希望这可以解决你的问题。

1
- (BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldRecognizeSimultaneouslyWithGestureRecognizer:(UIGestureRecognizer *)otherGestureRecognizer{
    if (SWTableViewCellTouch) {
        SWTableViewCellTouch = NO
        return NO;
    }

    return YES;
}

当您触碰SWTableViewCell时,将设置一个BOOL类型的SWTableViewCellTouch为YES。

这确实有所帮助,但仍然存在轻微冲突。似乎我必须在表格上用力滑动以避免冲突。 - Nitish

1
可能的解决方案是在touchesBegan:方法中启用/禁用BOOl(SWTableViewCellTouch),如下所示。
- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event
{
   if ([[event touchesForView:self] count] > 1) {
   // Its two finger touch so set the BOOL false like
   SWTableViewCellTouch = NO;
   }
   else if ([[event touchesForView:self] count] == 1){
    // Its sigle finger touch so set the BOOL true like
    SWTableViewCellTouch = YES;
   }
[super touchesBegan:touches withEvent:event] ;}

希望这能帮到你。

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