Aujourd'hui, on va aborder un sujet qui parle à tous les devs iOS : les storyboards.
Pour faire court : les storyboards sont les fichiers d'interface sous iOS/OS X. C'est là où vous placez vos
vues
dans vosscènes
, vous les positionnez entre elles, vous pouvez créer des interactions entre lesscènes
pour passer de l'une à l'autre. C'est proche des XAML de Visual ou des Layouts d'Android, mais avec la notion de relation entre lesscènes
en plus. Ça permet de créer graphiquement et simplement le workflow de l'application.
Pouvoir relier aussi facilement toutes les scènes
dans un même storyboard,
c'est génial. Mais alors, pourquoi les diviser ?
Si vous travaillez à plusieurs, vous avez sûrement déjà rencontré des conflits
lors de merges où tout le monde a décidé d'éditer le storyboard
en même temps.
Le storyboard est donc corrompu et le seul moyen de le récupérer est de prendre
celui de quelqu'un et refaire les changements ou de corriger les sources en
croisant les doigts. Accompagné de 4 L de café.
Avec plusieurs storyboards
: chacun bosse sur sa partie graphique. Si Bob travaille
sur les vues de comptes et Joe sur les settings de l'app, chacun a un storyboard
et ne change pas ceux des autres. On limite ainsi les chances d'avoir des conflits.
Pour les gros projets, avec beaucoup de scènes
, ranger ces scènes
par
groupes dans différents storyboards
peut être un bon moyen de s'y retrouver
facilement. Vous n'avez pas à dézoomer chaque fois que vous voulez chercher une
scène
à l'autre bout du storyboard.
Recompiler tout le storyboard juste pour un label
changé ça ne sert pas à
grand-chose et certains storyboards
peuvent être longs à compiler. Donc moins
d'éléments vous avez à recompiler, plus vite ça ira.
Imaginons que vous bossez dans une boîte qui fait souvent les mêmes apps pour les clients, vous pouvez vous faire de petits storyboards que vous réutiliserez et customiserez grâce aux contrôleurs (couleur, font, etc). Ça peut faire gagner du temps, mais aussi beaucoup en perdre si vous en abusez ⚠️.
Rentrons dans le vif du sujet, le côté technique. En quelques lignes de code :
// *** Swift ***
// Aller chercher le storyboard
let storyboardSettings = UIStoryboard(name: "settings", bundle: nil)
// Aller chercher le contrôleur qui est dans le storybard
let controllerSettings =
storyboardSettings.instantiateViewControllerWithIdentifier("settingsController")
// Présenter
self.presentViewController(controllerSettings,animated: true, completion: nil)
// *** Objective C ***
// Aller chercher le sotyboard
UIStoryboard * storyboardSettings = [UIStoryboard storyboardWithName:@"settings"
bundle:nil];
// Aller chercher le contrôleur qui est dans le storybard
UIViewController* controllerSettings = [storyboardSettings
instantiateViewControllerWithIdentifier:@"settingsController"];
// Présenter
[self presentViewController:controllerSettings animated:YES completion:nil];
Rien de plus simple ! Mais c'est bien connu, les développeurs iOS sont des fainéants, alors il y a encore plus simple, sans taper une seule ligne de code :
scène
(UIViewController
), mettre l'une en vue initiale
(sinon le compilateur n'aime pas),storyboardID
de chacune de ces scènes
dans le menu
Utilies>Identity Inspector
,Utilies>Object Library
cherchez
storyboard
et ajoutez une Storyboard References
,Utilises>Attributes Inspector
rentrez le nom dans
votre storyboard (dans storyboard) et remplissez Reference ID avec le
storyboardID de la scène
,segue
, à partir d'un bouton (par exemple) vers les
Storyboard Reference voulus.Plus long à lire qu'à faire !