Co to jest identyfikator StoryBoard i jak mogę go używać?

110

Jestem nowy w programowaniu IOS i niedawno zacząłem w Xcode 4.5. Widziałem dla każdego viewController, że mogę ustawić pewne zmienne tożsamości, w tym identyfikator storyboardu. Co to jest i jak mogę tego używać?

wprowadź opis obrazu tutaj

Zacząłem szukać na stackoverflow i nie mogłem znaleźć żadnego wytłumaczenia. Założyłem, że to nie jest jakaś głupia etykieta, którą mogę ustawić, aby zapamiętać mój kontroler, prawda? Co to robi?

RTB
źródło

Odpowiedzi:

132

Identyfikator serii ujęć to pole typu String, którego można użyć do utworzenia nowego ViewController na podstawie tego scenariusza ViewController. Przykładowe użycie pochodzi z dowolnego 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];
}

Spowoduje to utworzenie MyCustomViewController na podstawie scenorysu ViewController o nazwie „MyViewController” i zaprezentowanie go nad bieżącym kontrolerem widoku

A jeśli jesteś w swojej aplikacji, możesz użyć

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

Edycja: Swift

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

Edytuj dla Swift> = 3:

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

i

let storyboard = UIStoryboard(name: "MainStoryboard", bundle: nil)
Eric
źródło
Spróbujmy to, i jak można dostaćself.storyboard
RTB
Dostęp do self.storyboard można uzyskać z dowolnego kontrolera widoku. Zmienię teraz swoją odpowiedź, abyś mógł zobaczyć
Eric
A co w razie potrzeby, aby uzyskać do niego dostęp z mojej AppDelegate lub dowolnej innej klasy?
RTB
Dodano kolejną edycję pokazującą, jak uzyskać dostęp do serii ujęć z dowolnego pliku.
Eric
1
self.storyboardmożna uzyskać dostęp z dowolnego kontrolera widoku, który został załadowany z serii ujęć. Jeśli kontroler widoku nie został załadowany z serii ujęć, ta właściwość jest równa zero.
rob mayoff
13

Aby dodać do odpowiedzi Erica i zaktualizować ją dla Xcode 8 i Swift 3:

Identyfikator scenorysu robi dokładnie to, co sugeruje nazwa: identyfikuje. Wystarczy, że identyfikuje się kontroler widoku w pliku ujęć. W ten sposób storyboard wie, który kontroler widoku jest który.

Nie dajcie się zmylić nazwą. Identyfikator serii ujęć nie identyfikuje „scenorysu”. Scenorys, zgodnie z dokumentacją Apple, „przedstawia kontrolery widoku dla całego lub części interfejsu użytkownika aplikacji”. Tak więc, gdy masz coś takiego jak na poniższym obrazku, masz scenorys o nazwie Main.storyboard, który ma dwa kontrolery widoku, z których każdy może otrzymać identyfikator serii ujęć (ich identyfikator w serii ujęć).

wprowadź opis obrazu tutaj

Możesz użyć identyfikatora scenorysu kontrolera widoku, aby utworzyć wystąpienie i zwrócić ten kontroler widoku. Następnie możesz manipulować nim i prezentować go w dowolny sposób. Aby skorzystać z przykładu Erica, powiedzmy, że chcesz zaprezentować kontroler widoku z identyfikatorem „MyViewController” po naciśnięciu przycisku, zrobiłbyś to w ten sposób:

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

Zwróć uwagę na zmiany w składni.

Taiwosam
źródło
Żółta ikona ostrzeżenia wskazuje, że jest to spowodowane faktem, że drugi kontroler widoku nie ma punktu wejścia i / lub identyfikatora. Można temu zaradzić, nadając mu identyfikator scenorysu lub łącząc go z innym kontrolerem widoku w serii ujęć. W ten sposób storyboard wie, jak do niego dotrzeć i go zidentyfikować.
Taiwosam
Nie mogłem znaleźć pola Storyboard ID, więc dziękuję za zdjęcie. Jest na tej samej pozycji na Xcode 9.
Izaak Bosca