112 votes

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

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

enter image description here

J'ai commencé à chercher sur stackoverflow et je n'ai pas trouvé d'explication à cela.

Je suppose que ce n'est pas juste une étiquette stupide que je peux régler pour me souvenir de mon contrôleur, n'est-ce pas ? Qu'est-ce que ça fait ?

135voto

Eric Points 2533

L'ID du storyboard est un champ de type String que vous pouvez utiliser pour créer un nouveau ViewController basé sur ce ViewController du storyboard. Un exemple d'utilisation serait à partir 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 ViewController du storyboard 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)
}

y

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

0 votes

Essayons ça, et comment obtenez-vous la self.storyboard

0 votes

Self.storyboard est accessible depuis n'importe quel viewcontroller. Je vais éditer ma réponse maintenant pour que vous puissiez voir

0 votes

Et que faire si j'ai besoin d'y accéder depuis mon AppDelegate ou toute autre classe ?

16voto

Taiwosam Points 369

Pour compléter 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 indique : il identifie. Il suffit qu'il identifie a contrôleur de vue dans un fichier de storyboard. C'est ainsi que le storyboard sait quel contrôleur de vue est le bon.

Ne vous laissez pas tromper par le nom. L'ID d'un 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 possède deux contrôleurs de vue, chacun d'entre eux pouvant recevoir un ID de storyboard (leur ID dans le storyboard).

enter image description here

Vous pouvez utiliser l'ID du 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 reprendre l'exemple d'Eric, disons que vous voulez présenter un contrôleur de vue avec l'identifiant "MyViewController" lorsqu'on appuie sur un bouton, vous procéderez de la manière suivante :

@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.

0 votes

L'icône d'avertissement jaune indique que le deuxième contrôleur de vue n'a pas de point d'entrée et/ou d'ID. On peut y remédier 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.

0 votes

Je n'ai pas réussi à trouver le champ Storyboard ID, alors merci pour l'image. Il est dans la même position sur Xcode 9.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X