Cos'è un ID StoryBoard e come posso usarlo?


110

sono nuovo nello sviluppo di IOS e recentemente ho iniziato con Xcode 4.5. Ho visto per ogni viewController che potevo impostare alcune variabili di identità tra cui l'ID dello storyboard. Cos'è e come posso usarlo?

inserisci qui la descrizione dell'immagine

Ho iniziato a cercare su stackoverflow e non sono riuscito a trovare alcuna spiegazione. Ho pensato che non fosse solo una stupida etichetta che posso impostare per ricordare il mio controller, giusto? Che cosa fa?

Risposte:


132

L'ID storyboard è un campo String che è possibile utilizzare per creare un nuovo ViewController basato su tale ViewController storyboard. Un esempio di utilizzo potrebbe provenire da qualsiasi ViewController:

//Maybe make a button that when clicked calls this method

- (IBAction)buttonPressed:(id)sender
{
    MyCustomViewController *vc = [self.storyboard instantiateViewControllerWithIdentifier:@"MyViewController"];

   [self presentViewController:vc animated:YES completion:nil];
}

Questo creerà un MyCustomViewController basato sullo storyboard ViewController che hai chiamato "MyViewController" e lo presenterà sopra il tuo controller di visualizzazione corrente

E se sei nella tua app delegato potresti usare

UIStoryboard *storyboard = [UIStoryboard storyboardWithName:@"MainStoryboard"
                                                         bundle: nil];

Modifica: Swift

@IBAction func buttonPressed(sender: AnyObject) {
    let vc = storyboard?.instantiateViewControllerWithIdentifier("MyViewController") as MyCustomViewController
    presentViewController(vc, animated: true, completion: nil)
}

Modifica per Swift> = 3:

@IBAction func buttonPressed(sender: Any) {
    let vc = storyboard?.instantiateViewController(withIdentifier: "MyViewController") as! ViewController
    present(vc, animated: true, completion: nil)
}

e

let storyboard = UIStoryboard(name: "MainStoryboard", bundle: nil)

Proviamo e come si ottiene ilself.storyboard
RTB

È possibile accedere a self.storyboard da qualsiasi viewcontroller. Modificherò la mia risposta ora in modo che tu possa vedere
Eric

E se necessario per accedervi dal mio AppDelegate o da qualsiasi altra classe?
RTB

Aggiunta un'altra modifica che mostra come accedere allo storyboard da qualsiasi file.
Eric

1
self.storyboardè possibile accedere da qualsiasi controller di visualizzazione caricato da uno storyboard. Se il controller di visualizzazione non è stato caricato da uno storyboard, quella proprietà è nulla.
Rob Mayoff

13

Per aggiungere alla risposta di Eric e aggiornarla per Xcode 8 e Swift 3:

Un ID storyboard fa esattamente ciò che suggerisce il nome: identifica. Solo che identifica un controller di visualizzazione in un file storyboard. È così che lo storyboard sa quale controller di visualizzazione è quale.

Ora, non essere confuso dal nome. Un ID storyboard non identifica uno "storyboard". Uno storyboard, secondo la documentazione di Apple, "rappresenta i controller di visualizzazione per tutta o parte dell'interfaccia utente della tua app". Quindi, quando hai qualcosa come l'immagine qui sotto, hai uno storyboard chiamato Main.storyboard che ha due controller di visualizzazione, a ciascuno dei quali potrebbe essere assegnato un ID storyboard (il loro ID nello storyboard).

inserisci qui la descrizione dell'immagine

È possibile utilizzare l'ID storyboard di un controller di visualizzazione per creare un'istanza e restituire quel controller di visualizzazione. Puoi quindi procedere a manipolarlo e presentarlo come preferisci. Per usare l'esempio di Eric, supponi di voler presentare un controller di visualizzazione con l'identificatore "MyViewController" quando viene premuto un pulsante, lo faresti in questo modo:

@IBAction func buttonPressed(sender: Any) {
    // Here is where we create an instance of our view controller. instantiateViewController(withIdentifier:) will create an instance of the view controller every time it is called. That means you could create another instance when another button is pressed, for example.
    let vc = storyboard?.instantiateViewController(withIdentifier: "MyViewController") as! ViewController
    present(vc, animated: true, completion: nil)
}

Si prega di prendere nota dei cambiamenti nella sintassi.


L'icona di avvertenza gialla indica che è dovuta al fatto che il secondo controller di visualizzazione non ha un punto di ingresso e / o un ID. Questo può essere risolto assegnandogli un ID storyboard o collegandolo a un altro controller di visualizzazione nello storyboard. In questo modo, lo storyboard sa come raggiungerlo e identificarlo.
Taiwosam

Non sono riuscito a trovare il campo ID Storyboard, quindi grazie per l'immagine. È nella stessa posizione su Xcode 9.
Isaac Bosca
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.