Qu'est-ce qu'un identifiant StoryBoard et comment puis-je l'utiliser?


110

Je suis nouveau dans le développement d'IOS et j'ai récemment commencé dans Xcode 4.5. J'ai vu pour chaque viewController que je pouvais définir certaines variables d'identité, y compris l'ID du storyboard. Qu'est-ce que c'est et comment puis-je l'utiliser?

entrez la description de l'image ici

J'ai commencé à chercher sur stackoverflow et je n'ai trouvé aucune explication. J'ai supposé que ce n'était pas juste une étiquette stupide que je pouvais définir pour me souvenir de mon contrôleur, n'est-ce pas? Qu'est ce que ça fait?

Réponses:


132

L'ID de storyboard est un champ String que vous pouvez utiliser pour créer un nouveau ViewController basé sur ce ViewController de storyboard. Un exemple d'utilisation serait de n'importe quel 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];
}

Cela créera un MyCustomViewController basé sur le storyboard ViewController que vous avez nommé "MyViewController" et le présentera au-dessus de votre View Controller actuel

Et si vous êtes dans votre délégué d'application, vous pouvez utiliser

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

Edit: Swift

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

Modifier pour Swift> = 3:

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

et

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

Essayons ça, et comment obtenez-vous leself.storyboard
RTB

self.storyboard est accessible à partir de n'importe quel contrôleur de vue. Je vais modifier ma réponse maintenant pour que vous puissiez voir
Eric

Et si nécessaire pour y accéder depuis mon AppDelegate ou toute autre classe?
RTB

Ajout d'une autre modification montrant comment accéder au storyboard à partir de n'importe quel fichier.
Eric

1
self.storyboardest accessible à partir de n'importe quel contrôleur de vue chargé à partir d'un storyboard. Si le contrôleur de vue n'a pas été chargé à partir d'un storyboard, cette propriété est nulle.
rob mayoff

13

Pour ajouter à la réponse d'Eric et la mettre à jour pour Xcode 8 et Swift 3:

Un ID de storyboard fait exactement ce que son nom implique: il identifie. Juste qu'il identifie un contrôleur de vue dans un fichier de storyboard. C'est ainsi que le storyboard sait quel contrôleur de vue est quel.

Maintenant, ne soyez pas confus par le nom. Un ID de storyboard n'identifie pas un «storyboard». Un storyboard, selon la documentation d'Apple, «représente les contrôleurs de vue pour tout ou partie de l'interface utilisateur de votre application». Ainsi, lorsque vous avez quelque chose comme l'image ci-dessous, vous avez un storyboard appelé Main.storyboard qui a deux contrôleurs de vue, chacun d'entre eux pouvant recevoir un ID de storyboard (leur ID dans le storyboard).

entrez la description de l'image ici

Vous pouvez utiliser l'ID de storyboard d'un contrôleur de vue pour instancier et renvoyer ce contrôleur de vue. Vous pouvez ensuite le manipuler et le présenter comme vous le souhaitez. Pour utiliser l'exemple d'Eric, disons que vous souhaitez présenter un contrôleur de vue avec l'identifiant 'MyViewController' lorsqu'un bouton est enfoncé, vous le feriez de cette façon:

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

Veuillez prendre note des changements de syntaxe.


L'icône d'avertissement jaune indique que cela est dû au fait que le deuxième contrôleur de vue n'a pas de point d'entrée et / ou d'ID. Cela peut être résolu en lui donnant un ID de storyboard ou en le connectant à un autre contrôleur de vue dans le storyboard. De cette façon, le storyboard sait comment l'atteindre et l'identifier.
Taiwosam

Je n'ai pas pu trouver le champ ID du Storyboard, donc merci pour la photo. Il est dans la même position sur Xcode 9.
Isaac Bosca
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.