2013-03-01 11 views
20

Ho un semplice progetto xcode appena creato con il modello "Applicazione principale di dettaglio", per iPad. Quando il dispositivo è in orientamento verticale, la vista principale è nascosta e quando scorri verso destra nella vista dei dettagli, verrà visualizzata la vista principale. Ora, voglio aggiungere destra riconoscitore colpo gesto di vista di dettaglio, così:Aggiunta del rilevatore di gesti di scorrimento a DetailViewContoller

- (void)viewDidLoad 
{ 
    [super viewDidLoad]; 
    // Do any additional setup after loading the view, typically from a nib. 
    [self configureView]; 

    UISwipeGestureRecognizer *gestureRecognizer = [[UISwipeGestureRecognizer alloc] initWithTarget:self action:@selector(swipeHandler)]; 
    [self.view addGestureRecognizer:gestureRecognizer]; 
} 

-(void)swipeHandler{ 
    NSLog(@"SWIPE"); 
} 

Ma questo codice cause che quando ho swipe sulla vista di dettaglio, "SWIPE" registro viene visualizzato nella console, ma vista padrone non lo fa mostrare.

Come aggiungere il riconoscimento del gesto del passaggio del mouse destro alla vista dei dettagli, quindi non impedirà la visualizzazione della vista principale e il mio gestore del riconoscimento funzionerà?

Grazie in anticipo.

MODIFICA. Voglio che il mio diritto gestore colpo riconoscitore di lavorare contemporaneamente con questo costruito in uno, che si presenta vista maestro, ma che a seguito di codice non è una soluzione per questa situazione specifica:

- (BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldRecognizeSimultaneouslyWithGestureRecognizer:(UIGestureRecognizer *)otherGestureRecognizer{ 

    return YES; 
} 

risposta

38

si dovrebbe impostare la direzione per la colpo al fine di aggiungere la giusta colpo

UISwipeGestureRecognizer *gestureRecognizer = [[UISwipeGestureRecognizer alloc] initWithTarget:self action:@selector(swipeHandler:)]; 
    [gestureRecognizer setDirection:(UISwipeGestureRecognizerDirectionRight)]; 
    [self.view addGestureRecognizer:gestureRecognizer]; 

e il vostro gestore di colpo potrebbe essere simile

-(void)swipeHandler:(UISwipeGestureRecognizer *)recognizer { 
    NSLog(@"Swipe received."); 
} 
+0

Penso scorri verso destra è in realtà direzione di default e questo non è ciò che la questione è di circa –

+0

Sì, l'ho fatto. Il mio riconoscimento funziona perfettamente, ma questo integrato in uno non funziona più e questo è il problema. –

+1

stai impostando correttamente il delegato? per 'gestureRecognizer'? come si sta implementando il metodo delegato – nsgulliver

0

Questo funziona. Spinge il controller della vista dal navigationController.

- (void)viewDidLoad 
{ 
    [super viewDidLoad]; 
    // Do any additional setup after loading the view, typically from a nib. 
    UISwipeGestureRecognizer *gestureRecognizer = [[UISwipeGestureRecognizer   alloc] initWithTarget:self action:@selector(swipeHandler:)]; 
    [self.view addGestureRecognizer:gestureRecognizer]; 
} 

-(IBAction)swipeHandler:(UISwipeGestureRecognizer *)sender 
{ 
     NSLog(@"SWIPE"); 
     UIViewController *tb = [[DetailViewController alloc] init]; 
     tb = [self.storyboard instantiateViewControllerWithIdentifier:@"DetailViewController"]; 
     [self.navigationController pushViewController: tb animated:YES]; 
} 

quindi assicuratevi di andare a storyboard (o si potrebbe anche farlo manualmente) - cliccare sul dettaglio View Controller e dare il controller visualizzare l'identità: DetailViewController

+0

Non sono sicuro di cosa fare con la risposta. La conoscenza dello swipe direction mi dà una soluzione al mio problema? –

+0

ho davvero bisogno di entrambi: i miei e i regonizers integrati per lavorare sulla stessa vista, che è la vista di dettaglio. –

+0

si desidera eseguire la gestione dello scorrimento e disabilitare la presentazione della vista principale o si desidera reagire alla vista principale presentata? –

17
- (void)viewWillAppear:(BOOL)animated{ 
    [super viewWillAppear:animated]; 

    UISwipeGestureRecognizer *recognizer = [[UISwipeGestureRecognizer alloc] initWithTarget:self action:@selector(swipeRecognizer:)]; 
    recognizer.direction = UISwipeGestureRecognizerDirectionRight; 
    recognizer.delegate = self; 
    [self.view addGestureRecognizer:recognizer]; 
} 

- (void)swipeRecognizer:(UISwipeGestureRecognizer *)sender { 
    if (sender.direction == UISwipeGestureRecognizerDirectionRight){ 
     [UIView animateWithDuration:0.3 animations:^{ 
      CGPoint Position = CGPointMake(self.view.frame.origin.x + 100.0, self.view.frame.origin.y); 
      self.view.frame = CGRectMake(Position.x , Position.y , self.view.frame.size.width, self.view.frame.size.height); 
      [self.navigationController popViewControllerAnimated:YES]; 
     }]; 
    } 
} 
8

Try This

// Scorri verso destra

UISwipeGestureRecognizer *gestureRecognizer = [[UISwipeGestureRecognizer alloc] initWithTarget:self action:@selector(swipeHandlerRight:)]; 
[gestureRecognizer setDirection:(UISwipeGestureRecognizerDirectionRight)]; 
[self.view addGestureRecognizer:gestureRecognizer]; 

// sinistra Swipe

UISwipeGestureRecognizer *gestureRecognizer = [[UISwipeGestureRecognizer alloc] initWithTarget:self action:@selector(swipeHandlerLeft:)]; 
[gestureRecognizer setDirection:(UISwipeGestureRecognizerDirectionLeft)]; 
[self.view addGestureRecognizer:gestureRecognizer]; 

chiamata di metodo

-(void)swipeHandlerRight:(id)sender 
{ 
    //Your ViewController 
} 

-(void)swipeHandlerLeft:(id)sender 
{ 
//Your ViewController 
} 
Problemi correlati