Il mio problema è che stavo cercando il modo di utilizzare sia lo storyboard e xib. Ma non riesco a trovare il modo corretto di caricare e mostrare lo storyboard a livello di codice. Il progetto è stato avviato con lo sviluppo di xib e ora è molto difficile annidare tutti i file xib nello storyboard. Quindi stavo cercando un modo per farlo in codice, come con alloc, init, push
per viewControllers. Nel mio caso ho un solo controller nello storyboard: UITableViewController
, che ha celle statiche con alcuni contenuti che voglio mostrare. Se qualcuno conosce il modo corretto di lavorare sia con lo xib che con lo storyboard senza un enorme refactoring, lo apprezzerò per qualsiasi aiuto.Come posso caricare lo storyboard a livello di codice dalla classe?
risposta
Nello storyboard passare all'Inspector Attributi e impostare l'identificatore del controller di visualizzazione. È quindi possibile presentare il controller di visualizzazione utilizzando il seguente codice.
UIStoryboard *sb = [UIStoryboard storyboardWithName:@"MainStoryboard" bundle:nil];
UIViewController *vc = [sb instantiateViewControllerWithIdentifier:@"myViewController"];
vc.modalTransitionStyle = UIModalTransitionStyleFlipHorizontal;
[self presentViewController:vc animated:YES completion:NULL];
In attributo ispettore dare l'identificatore per tale controller vista e il codice qui sotto funziona per me
UIStoryboard *storyboard = [UIStoryboard storyboardWithName:@"MainStoryboard" bundle:nil];
DetailViewController *detailViewController = [storyboard instantiateViewControllerWithIdentifier:@"DetailViewController"];
[self.navigationController pushViewController:detailViewController animated:YES];
provare questo
UIStoryboard *mainStoryboard = [UIStoryboard storyboardWithName:@"Main" bundle:nil];
UIViewController *vc = [mainStoryboard instantiateViewControllerWithIdentifier:@"Login"];
[[UIApplication sharedApplication].keyWindow setRootViewController:vc];
Usa questo se non stai usando un UINavigationController come mostrato in altre risposte – latenitecoder
Swift 3
let storyboard = UIStoryboard(name: "Main", bundle: nil)
let vc = storyboard.instantiateViewController(withIdentifier: "viewController")
self.navigationController!.pushViewController(vc, animated: true)
Swift 2
let storyboard = UIStoryboard(name: "Main", bundle: nil)
let vc = storyboard.instantiateViewControllerWithIdentifier("viewController")
self.navigationController!.pushViewController(vc, animated: true)
Prerequisito
Assegnare un Storyboard ID al controller della vista.
IB> Mostra l'identità ispettore> Identità> ID Storyboard
Swift (legacy)
let storyboard = UIStoryboard(name: "Main", bundle: nil)
let vc = storyboard.instantiateViewControllerWithIdentifier("viewController") as? UIViewController
self.navigationController!.pushViewController(vc!, animated: true)
Edit: Swift 2 suggerito in un commento di Fred A.
In Swift 2, non devi aggiungere "come? UIViewController", il compilatore lo determina automaticamente –
oppure puoi semplicemente fare 'self.storyboard' e unire line1 e 2 – Honey
in rapida
navigationController e pushController è possibile sostituire per
present(vc, animated:true , completion: nil)
Per rapido 3 e 4, si può fare questo. È buona norma impostare il nome di Storyboard uguale a StoryboardID.
enum StoryBoardName{
case second = "SecondViewController"
}
extension UIStoryBoard{
class func load(_ storyboard: StoryBoardName) -> UIViewController{
return UIStoryboard(name: storyboard.rawValue, bundle: nil).instantiateViewController(withIdentifier: storyboard.rawValue)
}
}
e poi si può caricare il tuo storyboard nel vostro ViewController come questo:
class MyViewController: UIViewController{
override func viewDidLoad() {
super.viewDidLoad()
guard let vc = UIStoryboard.load(.second) as? SecondViewController else {return}
self.present(vc, animated: true, completion: nil)
}
}
Quando si crea un nuovo Storyboard sufficiente impostare lo stesso nome su StoryboardID e aggiungere il nome Storyboard in il tuo enum "StoryBoardName"
Puoi sempre andare direttamente al controller di root:
UIStoryboard* storyboard = [UIStoryboard storyboardWithName:@"Main" bundle:nil];
UIViewController *vc = [storyboard instantiateInitialViewController];
vc.modalTransitionStyle = UIModalTransitionStyleFlipHorizontal;
[self presentViewController:vc animated:YES completion:NULL];
- 1. Visualizzazione a livello di codice dello storyboard
- 2. Come posso collegare uno storyboard UISearchBar a un UISearchController creato a livello di codice?
- 3. Ottieni codice identificativo a livello di codice
- 4. Come posso rilevare lo sfondo di un'immagine a livello di codice?
- 5. Modifica vincolo a livello di codice Swift
- 6. Come creare un widget Oggi a livello di codice senza storyboard su iOS8?
- 7. Come posso comporre un messaggio a livello di codice?
- 8. Come posso aggiungere un contatto a livello di codice?
- 9. UIStoryboard come sostituire i vincoli a livello di codice?
- 10. confronto delle immagini a livello di codice - lib o classe
- 11. Come aggiungere i vincoli a livello di codice a un UIView creato a livello di codice?
- 12. Posso usare T4 a livello di codice da C#?
- 13. iOS - Storyboard - Usa un colore a livello di programmazione nella tavolozza di configurazione dello storyboard
- 14. Confuso su storyboard e spinta a livello di codice ios Obiettivo C
- 15. Controllare httpErrors errorMode a livello di codice
- 16. Aggiungi "Spaziatura verticale" a livello di codice in rapido
- 17. Come verificare lo stato di uno storyboard?
- 18. Facebook: posso aggiungere un amico a livello di codice?
- 19. RadioGroup: Come controllare a livello di codice
- 20. iPhone: Posso disabilitare a livello di codice automatico lo spegnimento del display?
- 21. Get riferimento classe dalla funzione di livello superiore in Kotlin
- 22. Scorrimento a livello di codice
- 23. Come posso aggiungere a livello di codice NewLines a una casella di testo di lavoro TFS?
- 24. Come posso aggiungere a livello di codice un livello sfumatura su un'immagine in Swift?
- 25. Come posso creare lo storyboard seguito da un controller di visualizzazione a se stesso?
- 26. Come assegnare lo spazio delle linee 5dp a TextView a livello di codice
- 27. Come posso aggiungere il contenuto a livello di codice a Wagtail StreamField?
- 28. aggiunta di UITableView a livello di codice a un UIViewController
- 29. Come creare e utilizzare UIcollectionView a livello di codice?
- 30. Web API 2 È possibile caricare un percorso/controller a livello di codice?
'[sb instantiateInitialViewController]' è utile se si desidera avviare il controller di visualizzazione predefinito della scena. – drewish
James, grazie! Ho cercato per un po 'di tempo cercando di capire come istanziare la visualizzazione di uno Storyboard. La tua risposta (e la domanda di kokoko) sono più rinfrescanti da trovare. – bejonbee
Sul codice di James Beith, si deve riutilizzare UIViewControler * vc se si passa avanti e indietro con il viewcontroller corrente. Ho scoperto che il vc si aggrappa e viene collegato al pennino dello storyboard finché l'utente non preme un pulsante nella nuova vista, e ora c'è una perdita di memoria con quel vc scartato dagli incantesimi precedenti di questo codice. – SWoo