2013-01-22 7 views
6

Salve, ho un ViewController che esegue un seguito su un pulsante.trucchi PerformSegueWithIdentifier per evitare il ritardo iniziale

- (IBAction)moveToCoolViewButtonTapped { 
    [self performSegueWithIdentifier:@"toCoolView" sender:nil]; 
} 

Questo funziona bene, a parte un fastidioso ritardo la prima volta che viene eseguito, credo a causa della vista non essere ancora inizializzato. Ovviamente non voglio dover creare prematuramente molte visualizzazioni. (Ci sono molti altri segui pianificati dallo stesso viewController). Quindi, forse un colpo lungo: ma mi chiedevo se qualcuno avesse qualche trucco brillantemente ispirato per evitare il ritardo iniziale?

risposta

1
UIStoryboard *storyboard = [UIStoryboard storyboardWithName:@"MainStoryboard" bundle:nil]; 
toCoolView *yourViewController = (toCoolView *)[storyboard instantiateViewControllerWithIdentifier:@"toCoolView"]; 
[self.navigationController pushViewController:yourViewController animated:YES]; 

Try che accoppiarsi

+1

Grazie, ma no. Esattamente lo stesso risultato, il che ha senso perché fondamentalmente fa esattamente la stessa cosa (iniziando quindi visualizzando). –

0

Hey ho avuto lo stesso problema. È venuto per il tuo post in cerca di soluzione. Penso di aver finalmente trovato il problema.

I problemi non sono i tuoi in performSegueWithIdentifier ma sono nel controller di destinazione (Ovunque "toCoolView" ti porti). controlla la sua viewDidLoad e vedi se c'è qualcosa che potrebbe richiedere più tempo per caricare. Nel mio caso stavo allocando e inizializzando UIImagepickerController che causava il ritardo, quindi l'ho rimosso da lì e l'ho inserito in ViewDidAppear.

Basta provare a commentare ogni cosa nel tuo viewDidLoad del tuo controller di destinazione e vedere se accelera la sequenza.

Speranza che aiuta

2

provare sostituire questo

[self performSegueWithIdentifier:@"toCoolView" sender:nil]; 

con questo

dispatch_async(dispatch_get_main_queue(),^{ 
    [self performSegueWithIdentifier:@"toCoolView" sender:nil]; 
});