7

Poniżej znajduje się kod Pisałem umieścić 2 palec bezstykowa na UITableView:UITableView konflikty gest machnięcia z UITableViewCell przesuń

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

Używam SWTableViewCell która lewo i prawo (Simple) gestureRecognisers.
Kiedy UITableView swiped lewo/prawo za pomocą 2 palców, SWTableViewCell lewy i prawy gesty są również zwolniony po tym.
Jak zatrzymać konflikt?

+0

jeśli można go rozwiązać za pomocą gesta, po prostu spójrz [to przeszłość] (http://stackoverflow.com/a/39806768/4003548) i wymyśl. – vaibhav

+0

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

+0

@HimanshuMoradiya: Zrobione już. Wciąż stoję w obliczu problemu. – Nitish

Odpowiedz

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

    return YES; 
} 

po dotknięciu zestawu SWTableViewCell ustawić BOOL SWTableViewCellTouch na TAK.

+0

To pomaga, ale nadal wydaje się być drobnym konfliktem. Wygląda na to, że muszę mocno przesunąć stół, aby uniknąć konfliktu. – Nitish

1

możliwe rozwiązanie jest włączanie/wyłączanie Bool (SWTableViewCellTouch) w touchesBegan: sposób jak poniżej.

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

Mam nadzieję, że to ci pomoże.

1

1. Wdrożenie UIGestureRecognizerDelegate w swojej UIViewController

2. Ustaw leftSwipe.delegate = self; i leftSwipe.delegate = self;

3. teraz sprawdzić, czy w jego metodzie Delegata jeśli UISwipeGesture mają Ile 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; 
    } 

Mam nadzieję, że rozwiąże to Twój problem