Was ist eine StoryBoard-ID und wie kann ich diese verwenden?

110

Ich bin neu in der IOS-Entwicklung und habe kürzlich mit Xcode 4.5 begonnen. Ich habe für jeden viewController gesehen, dass ich einige Identitätsvariablen festlegen kann, einschließlich der Storyboard-ID. Was ist das und wie kann ich es benutzen?

Geben Sie hier die Bildbeschreibung ein

Ich begann nach Stackoverflow zu suchen und konnte keine Erklärung dafür finden. Ich nahm an, dass es nicht nur ein dummes Etikett ist, das ich einstellen kann, um mich an meinen Controller zu erinnern, oder? Was tut es?

RTB
quelle

Antworten:

132

Die Storyboard-ID ist ein String-Feld, mit dem Sie einen neuen ViewController basierend auf diesem Storyboard-ViewController erstellen können. Eine Beispielverwendung wäre von jedem 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];
}

Dadurch wird ein MyCustomViewController basierend auf dem Storyboard ViewController erstellt, den Sie "MyViewController" genannt haben, und über Ihrem aktuellen View Controller angezeigt

Und wenn Sie in Ihrem App-Delegaten sind, können Sie verwenden

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

Edit: Schnell

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

Für Swift bearbeiten> = 3:

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

und

let storyboard = UIStoryboard(name: "MainStoryboard", bundle: nil)
Eric
quelle
Lassen Sie uns das versuchen, und wie bekommen Sie dieself.storyboard
RTB
Auf self.storyboard kann von jedem Viewcontroller aus zugegriffen werden. Ich werde meine Antwort jetzt bearbeiten, damit Sie sehen können
Eric
Und was ist, wenn Sie von meinem AppDelegate oder einer anderen Klasse darauf zugreifen müssen?
RTB
Es wurde eine weitere Bearbeitung hinzugefügt, die zeigt, wie von einer beliebigen Datei aus auf das Storyboard zugegriffen werden kann.
Eric
1
self.storyboardDer Zugriff kann von jedem View Controller aus erfolgen, der von einem Storyboard geladen wurde. Wenn der View Controller nicht aus einem Storyboard geladen wurde, ist diese Eigenschaft gleich Null.
Rob Mayoff
13

So fügen Sie Erics Antwort hinzu und aktualisieren sie für Xcode 8 und Swift 3:

Eine Storyboard-ID macht genau das, was der Name impliziert: Sie identifiziert. Nur dass es einen View Controller in einer Storyboard-Datei identifiziert . Auf diese Weise weiß das Storyboard, welcher View Controller welcher ist.

Lassen Sie sich jetzt nicht vom Namen verwirren. Eine Storyboard-ID identifiziert kein "Storyboard". Ein Storyboard stellt laut Apples Dokumentation "die Ansichts-Controller für die gesamte oder einen Teil der Benutzeroberfläche Ihrer App dar". Wenn Sie also so etwas wie das folgende Bild haben, haben Sie ein Storyboard namens Main.storyboard mit zwei Ansichts-Controllern, denen jeweils eine Storyboard-ID (ihre ID im Storyboard) zugewiesen werden kann.

Geben Sie hier die Bildbeschreibung ein

Sie können die Storyboard-ID eines View Controllers verwenden, um diesen View Controller zu instanziieren und zurückzugeben. Sie können es dann manipulieren und präsentieren, wie Sie möchten. Um Erics Beispiel zu verwenden, sagen Sie, Sie möchten einen Ansichts-Controller mit der Kennung 'MyViewController' präsentieren, wenn eine Taste gedrückt wird. Gehen Sie dazu folgendermaßen vor:

@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)
}

Bitte beachten Sie Änderungen in der Syntax.

Taiwosam
quelle
Das gelbe Warnsymbol zeigt an, dass der zweite Ansichtscontroller keinen Einstiegspunkt und / oder keine ID hat. Dies kann behoben werden, indem Sie ihm eine Storyboard-ID geben oder ihn mit einem anderen View-Controller im Storyboard verbinden. Auf diese Weise weiß das Storyboard, wie es erreicht und identifiziert werden kann.
Taiwosam
Ich konnte das Feld "Storyboard-ID" nicht finden. Vielen Dank für das Bild. Es ist in der gleichen Position auf Xcode 9.
Isaac Bosca