2011-11-02 3 views
28

Probabilmente esiste una soluzione semplice ma non riesco a capirlo.Collegamento di un nuovo viewcontroller a Storyboard?

Sto usando gli storyboard per l'interfaccia.

Inizio con un controller di barra delle linguette, ma prima che l'utente possa utilizzare l'app, l'utente deve autenticarsi tramite una vista di login che viene spinta in modo modale all'inizio.

Voglio configurare il loginview nello stesso storyboard, ma non riesco a capire come collegare il controller di visualizzazione allo storyboard e il mio codice.

Quello che ho fatto:

  • Creare un nuovo file attraverso UIViewController sottoclasse> nuovo> nuovo file.
  • Trascinare un nuovo UIViewController nel story board
  • Impostare la classe nella scheda classe personalizzata
  • trascina un UILabel a scopo di test.
  • corsa

No etichetta ...

risposta

40

Tirare su un nuovo UIViewController che fungerà da controller della vista di login sul MainStoryboard. Nella finestra di ispezione attributo, modificare l'identificativo in LoginViewController (o qualcosa di appropriato). Quindi aggiungere

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

    UIStoryboard *storyboard = [UIStoryboard storyboardWithName:@"MainStoryboard" bundle:nil]; 
    UIViewController *vc = [storyboard instantiateViewControllerWithIdentifier:@"LoginViewController"]; 
    [vc setModalPresentationStyle:UIModalPresentationFullScreen]; 

    [self presentModalViewController:vc animated:YES]; 
} 

al primo controller di vista e la schermata di accesso verrà caricata dal vostro storyboard e presentato.

Spero che questo aiuti.

+0

No, non è quello che intendevo. Ho i file .m e .h e non voglio file .xib ma configuro la visualizzazione nello storyboard principale. – Justin

+0

Ho spiegato come creare la schermata di accesso all'interno dello storyboard principale in modo da non aver bisogno di uno xib. –

+0

Ma non è quello che voglio. Ad esempio, quando si ha una visualizzazione dinamica della tabella, si desidera premere una vista quando si preme una cella. Ma come puoi farlo con gli storyboard. – Justin

6

La risposta di Scott Sherwood sopra è la risposta più corretta che ho trovato dopo molte ricerche. Anche se le modifiche sono minime come per il nuovo SDK (6.1), presentModalViewController risulta deprecato.

Qui c'è una piccola modifica alla risposta sopra.

UIStoryboard *sb = [UIStoryboard storyboardWithName:@"Storyboard" bundle:nil]; 
    HomeViewController * hvc = [sb instantiateViewControllerWithIdentifier:@"LoginView"]; 
    [hvc setModalPresentationStyle:UIModalPresentationFullScreen]; 
    [self presentViewController:hvc animated:YES completion:nil]; 
+0

Grazie per aver condiviso! – Justin

1

Sono nuovo in questo campo. Ma se il primo controller di visualizzazione è un controller di visualizzazione di navigazione e il suo controller di rootview è un controller di visualizzazione tabella. Se si desidera premere un controller di visualizzazione come LoginViewController quando si fa clic sulla cella e si desidera tornare alla visualizzazione tabella utilizzando la barra di navigazione. Raccomando in questo modo:

-(void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath { 

    UIStoryboard *sb = [UIStoryboard storyboardWithName:@"Main" bundle:nil]; 
    UIViewController *controller = [sb instantiateViewControllerWithIdentifier:@"LoginViewController"]; 
    [self.navigationController pushViewController:controller animated:YES]; 
} 

In questo modo, è possibile avere la navigazione.

A proposito, non so perché apparirà questo tipo di problema che hai chiesto. Immagino che quando il loginviewcontroller viene creato nel codice, la sua vista non è la vista nello storyboard. Se qualcuno conosce la causa, per favore dimmelo! Grazie!