2011-11-13 17 views
6

Ho una barra delle schede creata a livello di codice e ho difficoltà nell'inizializzare uno storyboard associato a una vista.Creazione di una barra delle schede programmatica con controller di visualizzazione storyboard?

Sono in grado di caricare correttamente la vista nella barra delle schede senza lo storyboard (vedere il codice riportato di seguito) ma la vista viene visualizzata solo parzialmente perché alcuni componenti dell'interfaccia utente si trovano nello storyboard.

Il nome dello storyboard è MainStoryboard e ho impostato l'identificatore della vista dello storyboard su SettingsViewController.

Come posso inizializzare lo storyboard per SettingsViewController nel codice qui sotto?

- (void)createTabBarItems { 
    tabBarController = [[UITabBarController alloc] init]; 

    settingsViewController = [[SettingsViewController alloc] init]; 


    UINavigationController *sett = [[[UINavigationController alloc] 
            initWithRootViewController: settingsViewController] autorelease]; 

    [sett.tabBarItem setTitle:@"Settings"]; 
    [sett.tabBarItem setImage:[UIImage imageNamed:@"settings.png"]]; 

    [tabBarController setViewControllers: 
     [NSArray arrayWithObjects:sett, sett, sett, sett, nil]]; 
} 

risposta

16

Se si desidera inizializzare il controller della vista, come nello storyboard è necessario utilizzare i metodi storyboard invece di allocare il controller della vista direttamente:

// load the storyboard by name 
UIStoryboard *storyboard = [UIStoryboard storyboardWithName:@"MainStoryboard" bundle:nil]; 

// either one of the two, depending on if your view controller is the initial one 
settingsViewController = [storyboard instantiateInitialViewController]; 
settingsViewController = [storyboard instantiateViewControllerWithIdentifier:@"SettingsViewController"]; 
+0

I ricevuto un errore sulla prima riga del tuo codice "Nessun metodo di classe conosciuto per il selettore" storyBoardWithName: "". Così ho aggiunto "bundle: nil" alla prima riga del tuo codice. Ora sto ricevendo l'errore: "La spinta di un controller di navigazione non è supportata" Cosa posso fare per correggere l'errore e ho fatto la cosa giusta aggiungendo "bundle: nil"? – kevin

+0

Funziona ora ... Ho mescolato parte del codice. Grazie! – kevin

+0

Grazie, il parametro bundle era effettivamente mancante, l'ho corretto. 'bundle: nil' va bene perché questo farà la ricerca nel pacchetto principale. –

0

Swift 4

let storyboard = UIStoryboard(name: "Main", bundle: nil) 
settingsViewController = storyboard.instantiateInitialViewController() 
settingsViewController = storyboard.instantiateViewController(withIdentifier: "SettingsViewController") 
Problemi correlati