7

以下是我已经写了把2指轻扫上UITableView代码: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已经左右(单抽头)gestureRecognisers。
UITableView正确使用2个手指,SWTableViewCell左右手势后还可发射刷卡左/。
如何制止冲突?

+0

如果可以用手势代表来解决,只要看看[过去ANS(http://stackoverflow.com/a/39806768/4003548),并弄清楚。 – vaibhav

+0

- (BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldRecognizeSimultaneouslyWithGestureRecognizer:(UIGestureRecognizer *)otherGestureRecognizer { 返回YES; } –

+0

@HimanshuMoradiya:已经完成了。仍然面临这个问题。 – Nitish

回答

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

    return YES; 
} 

当您触摸SWTableViewCell时,将BOOL SWTableViewCellTouch设置为YES。

+0

这确实有帮助,但似乎仍有小小的冲突。似乎我必须在桌子上用力滑动才能避免冲突。 – 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] ;} 

希望这会帮助你。

1

实现UIGestureRecognizerDelegateUIViewController

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

现在检查在其委托方法如果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; 
    } 

我希望这将解决您的问题