È possibile passare da uno storyboard all'altro o incorporare uno storyboard in un controller di visualizzazione in un altro storyboard? Devo inserire a UITabBarController
in a UINavigationController
e mi piacerebbe mantenerli belli e separati.
È possibile passare da uno storyboard all'altro o incorporare uno storyboard in un controller di visualizzazione in un altro storyboard? Devo inserire a UITabBarController
in a UINavigationController
e mi piacerebbe mantenerli belli e separati.
Risposte:
Sì, ma devi farlo a livello di codice:
// Get the storyboard named secondStoryBoard from the main bundle:
UIStoryboard *secondStoryBoard = [UIStoryboard storyboardWithName:@"secondStoryBoard" bundle:nil];
// Load the initial view controller from the storyboard.
// Set this by selecting 'Is Initial View Controller' on the appropriate view controller in the storyboard.
UIViewController *theInitialViewController = [secondStoryBoard instantiateInitialViewController];
//
// **OR**
//
// Load the view controller with the identifier string myTabBar
// Change UIViewController to the appropriate class
UIViewController *theTabBar = (UIViewController *)[secondStoryBoard instantiateViewControllerWithIdentifier:@"myTabBar"];
// Then push the new view controller in the usual way:
[self.navigationController pushViewController:theTabBar animated:YES];
Da Xcode 7 in poi, puoi farlo graficamente usando uno Storyboard Reference:
Aggiungi riferimento allo storyboard allo storyboard. Crea segue tra ViewController e Storyboard Reference (ctrl + trascina)
Quindi riempire questi campi.
Dove "Tutorial" è il file "Tutorial.storyboard" e "MainTutorialController" è il campo "ID storyboard" in ViewControllerSettings
Non puoi davvero fare segues manualmente perché UIStoryboardSegue è una classe astratta. Devi sottoclassarlo e implementarlo perform
affinché possa fare qualsiasi cosa. Sono davvero pensati per essere creati negli storyboard. Tuttavia, puoi spingere manualmente il controller di visualizzazione, che è una buona soluzione. La risposta di lnafziger lo fa bene:
UIStoryboard *secondStoryBoard = [UIStoryboard storyboardWithName:@"secondStoryBoard" bundle:nil];
UIViewController *theTabBar = [secondStoryBoard instantiateViewControllerWithIdentifier:@"myTabBar"];
[self.navigationController pushViewController:theTabBar animated:YES];
Una cosa da notare, tuttavia, è che hai detto che vuoi mantenere le cose belle e separate. L'idea degli storyboard è di permetterti di tenere le cose separate mentre fai tutto il tuo lavoro di progettazione in un unico posto. Ogni controller di visualizzazione è bello e separato dallo storyboard dagli altri. L'idea è di tenere tutto in un unico posto. Disporlo bene in modo che sia organizzato, e sarai a posto. Non dovresti separarlo a meno che tu non abbia davvero una buona ragione per farlo.
Non inserire UITabBarController in un UINavigationController. Chiede bug come autorotazione / scarico della vista errati ecc., Poiché Apple non supporta questo tipo di contenimento:
Quando si combinano i controller di visualizzazione, tuttavia, l'ordine di contenimento è importante; sono valide solo alcune disposizioni. L'ordine di contenimento, da figlio a genitore, è il seguente:
- Controller di visualizzazione del contenuto e controller di visualizzazione del contenitore con limiti flessibili (come il controller di visualizzazione della pagina)
- Controller della vista di navigazione
- Controller barra delle schede
- Controller vista divisa
Ecco una versione rapida:
let targetStoryboardName = "Main"
let targetStoryboard = UIStoryboard(name: targetStoryboardName, bundle: nil)
if let targetViewController = targetStoryboard.instantiateInitialViewController() {
self.navigationController?.pushViewController(targetViewController, animated: true)
}
hai provato quanto segue:
2 / fare clic per selezionare il controller di visualizzazione collegato al controller di navigazione e nel menu principale: editor -> incorpora -> Controller barra delle schede
Nota: non l'ho provato perché sto usando il contrario: creare app con barra a schede e inserire il controller di navigazione).