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; 
    } 

我希望這將解決您的問題