Quels sont les avantages de l'utilisation de Storyboards au lieu de files xib dans la programmation iOS?

Quelles sont les principales différences entre l'utilisation de Storyboards et des files xib?

Plus précisément, quels sont les avantages ou les inconvénients de l'utilisation d'un Storyboard?

Malheureusement, malgré tout un peu de search, tout ce que j'ai pu find sur Storyboards sont de simples tutoriels qui vous montrent comment configurer un Storyboard, au lieu d'informations concrètes expliquant ce qu'ils sont.

Un storyboard est:

  • Un conteneur pour toutes vos scènes (View Controllers, Nav Controllers, TabBar Controllers, etc)
  • Un gestionnaire de connections et de transitions entre ces scènes (on les appelle Segues)
  • Une bonne façon de gérer la façon dont les différents controllers se parlent
  • Les storyboards vous donnent un aperçu complet du stream de votre application que vous ne pouvez jamais get à partir de files nib individuels qui circulent.
  • Un réducteur de tout le "fouillis" qui se produit quand vous avez plusieurs controllers chacun avec son propre file nib.

J'utilise Storyboards depuis un moment et le seul inconvénient est que vous ne pouvez pas cibler iOS 4 ou less. Les storyboards ne fonctionnent que sur les appareils exécutant iOS 5 ou supérieur. Autre que cela, les avantages sont nombreux et les inconvénients sont inexistants IMO.

Le meilleur tutoriel que j'ai vu est celui de Ray Wenderlich

Aussi, si vous êtes un membre du programme Apple Developer, consultez la session WWDC de l'année dernière sur Storyboards (iTunesU), c'est génial.

Un autre excellent (également sur iTunesU) est le dernier cours de programmation d'application iOS de Stanford.

Il n'y a pas seulement des côtés pros de Storyboarding, mais aussi parce que vous avez demandé des commentaires:

  • il n'est pas facile de travailler avec des SB dans une équipe, car un seul participant peut travailler sur le SB en même time (parce que c'est un file).

– Ce qui suit n'est pas vrai: – si vous avez besoin de faire des choses que SB ne propose pas, il n'est pas facile de mélanger SB avec des vues créées par programme (enfin, c'est possible)

La règle empirique semble être la suivante: plus vous attendez de votre projet, plus vous ferez mieux d'opter pour SB.

EDIT: – un autre inconvénient de SB: travailler autour de tous les bogues ennuyeux de XCode en ce qui concerne SB. Par exemple, avoir à vider fréquemment le dossier DerivedData en raison de plusieurs incohérences. Parfois, les files de storyboard ou le lien vers eux sont corrompus. Alors vous pourriez avoir la joie de searchr le problème. Jetez un oeil à ce fil pour avoir l'idée

EDIT 2 (mars 2013): entre-time, Storyboards et Xcode fonctionnent beaucoup mieux, et la documentation et les meilleures pratiques sont très répandues. Je pense que travailler avec storyboard peut être recommandé pour une majorité de projets, même s'il y a encore quelques problèmes.

EDIT 3 (septembre 2013): maintenant, avec le nouveau format Xcode 5, travailler en équipe avec SB pourrait être encore meilleur, car il semble désormais possible de merge le code SB.

Un autre EDIT: bien, si vous avez une heure de time, asseyez-vous, détendez-vous et écoutez ces gars discuter de ce sujet (Ray Wenderlich & Co)

Edit 2016.1: après avoir longtime été un partisan de Storyboard, j'avais tellement de soucis avec les derniers mois, que j'ai décidé d'abandonner autant que possible les Storyboards. La raison en est que Apple ajoute une fonctionnalité comme stupide, mais ne se soucie pas des bugs et des failles. La performance ayant beaucoup de contraintes de layout automatique est vraiment mauvaise (alors que le time de design), et le risque d'erreur est devenu énorme. Exemple: les Storyboards encore less complexes ont tendance à entrer dans un 'mode sale' juste après l'ouverture d'un projet dans Xcode (voir l'état git). Astuce: en tant que débutant, vous allez adorer Storyboards, car vous pouvez rapidement prototyper et faire tourner les choses sans beaucoup de code. Lorsque vous entrez dans un état intermédiaire, vous ajoutez du code graphique à votre projet. Maintenant, vous commencez à aller et venir entre le code et SB – et les choses commencent à aller mal. Tôt ou tard, vous aurez tendance à faire la plupart des choses en code, car le résultat est plus prévisible que d'avoir plusieurs sources.

Résumé

Les files Nib / .xib et Storyboards sont tous deux des files Interface Builder qui servent à créer visuellement l'interface user pour les applications iOS et Mac dans Xcode (je vais utiliser la terminologie iOS pour les classs car cette question est taguée iOS mais s'applique également à la programmation Mac) .

Différences

Les plumes sont destinées à être utilisées avec un seul UIView . Ils peuvent également être connectés à une sous-class UIViewController en paramétrant la class du propriétaire du file sur n'importe quelle sous-class de UIViewController et en connectant la sortie de vue (faites glisser pour vous connecter en utilisant l'inspecteur Connections dans le volet extrême droite de Xcode).

Les storyboards sont destinés à contenir l'interface user pour 1 ou plusieurs UIViewController . Vous pouvez créer votre interface user entière dans un storyboard unique ou la séparer en parties plus petites.

Avantages

Les storyboards doivent toujours être utilisés en faveur des files .xib / Nibs (pour les controllers de vue). Les storyboards ont plus de fonctionnalités et sont activement développés par Apple.

Chaque argument en faveur de Nibs repose sur le fait qu'ils sont utilisés individuellement alors que les storyboards contiennent de nombreuses scènes. Vous pouvez utiliser un storyboard unique pour chaque UIViewController aussi facilement que vous le pouvez avec des Nibs (voir les exemples de code ci-dessous). Continuez à lire pour une explication détaillée et des exemples de code.

Détaillé

Pourquoi Storboards est-il supérieur aux Nibs?

La réponse revient essentiellement à Apple en encourageant l'utilisation de Storyboards et en y consacrant davantage d'efforts de développement.

  1. Les storyboards ont une capacité de zoom qui manque aux plumes. Sérieusement, vous ne pouvez pas zoomer du tout dans Nibs qui craint lors de la design pour les écrans plus grands sur un petit ordinateur portable.
  2. Nibs manquent de fonctionnalités keys comme:
    • Cellules prototypes et dynamics pour UITableView ( plus d'infos )
    • La propriété du top layout guide (voir commentaire)
    • Il y en a probablement plus, s'il vous plaît modifier ou commenter si vous avez quelque chose à append à cette list
  3. Vous n'avez pas besoin de régler la class de propriétaires de files.

L'argument de base contre les storyboards est que le fait d'avoir tous vos controllers de vues à un endroit conduit à des conflits de fusion, un Xcode lent, des time de construction lents et une douleur générale à maintenir. Par conséquent, le conseil général est d'utiliser un Nib pour chaque UIViewController .

Mais … Vous pouvez simplement créer un storyboard pour chaque UIViewController . Une pratique courante (pour moi au less) est de cacher toute l'initialisation de UIViewController dans une méthode de class (comme aucune autre class n'a besoin de connaître le nom du file où se trouve la Nib / Storyboard du controller). Permet de comparer les extraits de code connexes que l'on peut utiliser pour créer une telle méthode. Une seule ligne de code est la différence entière entre les deux.

Objectif c

Storyboard

 + (ViewController *)create { UIStoryboard *storyboard = [UIStoryboard storyboardWithName:@"ViewController" bundle:nil]; return [storyboard instantiateInitialViewController]; } 

Plume

 + (ViewController *)create { return [super initWithNibName:@"ViewController" bundle:nil]; } 

Usage

 - (void)showMyViewController { ViewController *vc = [ViewController create]; [self presentViewController:vc animated:YES completion:nil]; } 

Rapide

Storyboard

 static func create() -> ViewController { let storyboard = UIStoryboard(name: "ViewController", bundle: NSBundle.mainBundle()) return storyboard.instantiateInitialViewController() as! ViewController } 

Plume

 static func create() -> ViewController { return ViewController(nibName: "ViewController", bundle: nil) } 

Usage

 func showMyViewController() { let vc = ViewController.create() self.presentViewController(vc, animated: true, completion: nil) } 

Arguments

Je vais aborder tous les arguments habituels pour les Nibs; comme je l'ai mentionné plus tôt, il y a surtout en faveur des files uniques, pas comme un argument pour les Nibs sur Storyboards

  1. Équipes et fusion

Argument: Avoir un storyboard avec beaucoup de controllers de vue provoquera des conflits de fusion si vous travaillez sur une équipe avec plusieurs personnes effectuant des changements

Réponse: Un seul storyboard ne génère plus de conflits de fusion qu'un seul Nib

  1. Complexité

Argument: Les applications très complexes ont beaucoup de scènes dans le Storyboard qui mène à un storyboard géant qui prend une éternité à charger et est à peine compréhensible à cause de sa taille.

Réponse: C'est un excellent point, mais vous pouvez facilement split Storyboards en parties plus petites. Les references de Storyboard ressemblent à une grande fonctionnalité qui peut être utilisée pour relier des Storyboards set mais elles ne sont disponibles que dans Xcode 7 / iOS 9+. En outre, toujours pas une raison de choisir des clous individuels sur Storyboards.

  1. Réutilisabilité

Argument: La création d'une Nib pour chaque sous-class de UIViewController vous permet de réutiliser le code afin que vous n'ayez pas à configurer toutes vos contraintes et tous vos points de vente pour chaque scène de votre storyboard.

Réponse: Encore une fois, ce n'est pas une raison pour choisir des Nib individuels sur des Storyboards individuels.

Il y a eu une belle présentation de Storyboard lors de la réunion du LiDG il y a quelques mois.

Personnellement, je dirais que c'est la voie à suivre avec une nouvelle application. Il y a quelques lacunes, surtout pour les applications très complexes, mais les pro l'emportent largement sur les inconvénients.

Quelques avantages supplémentaires des storyboards:

  • Les storyboards ont un meilleur support pour les vues de table. C'est-à-dire que vous pouvez utiliser des cellules "dynamics" et "prototypes".
  • Il est plus facile d'instancier les controllers de vue à l'aide de storyboards. Vous pouvez faire des choses comme: [se lf.storyboard instantiateViewControllerWithIdentifer:]
  • Les storyboards prennent en charge les conteneurs de controllers de vue, ce qui vous permet de disposer des controllers de vue enfant sous forme graphique.

Les inconvénients sont:

  • Les storyboards sont lents à rendre en XCode quand ils contiennent beaucoup de controllers de vue

  • L'autolayout ne peut pas être activé pour un controller de vue dans le storyboard.

Attention, si vous utilisez Storyboards, votre application n'est pas rétrocompatible avec les anciennes installations du operating system.

Un storyboard est essentiellement un dispositif pour faciliter votre travail en tant que développeur. Il est respecté dans une série de files nib, donc la performance est à peu près équivalente, mais c'est génial en tant que développeur de pouvoir regarder un aperçu rapide de l'set de votre stream d'applications.

Je commence à utiliser des storyboards sur de nouveaux projets, à condition que je puisse convaincre le client d'accepter iOS 5 comme version minimale. C'est purement parce que je préfère le faire de cette façon, et il me faut less de time pour accomplir les mêmes tâches.

Votre attitude vis-à-vis de la disposition automatique peut également affecter si vous souhaitez utiliser des Storyboards. En utilisant xibs, vous pouvez activer ou désactiver la layout automatique sur une base par .xib, ce qui permet un mixage dans votre application, tandis que les storyboards appliquent votre choix à TOUTES les vues qu'ils contiennent.

Vous voyez la grande image en une seconde. Ayant beaucoup de files NIB, eh bien, vous ne voyez pas la grande image. Plus facile de maintenir vos programmes. Plus facile de comprendre les autres programmes … entre autres.

Avantages:

1) C'est très agréable de concevoir des interfaces

2) Vous pouvez utiliser StoryGardard Segues pour identifier les relations de navigation / modales d'une manière cool.

3) Si votre application prend en charge plusieurs appareils, c'est un bon moyen d'organiser différentes vues.

4) Le prototypage est un autre avantage supplémentaire.

5) Prototype UITableViewCell peut gagner du time et réduire la quantité de code aussi.

6) vous pouvez voir tous les écrans de l'application à un endroit en utilisant StoryBoard.

7) Vous pouvez facilement voir la relation entre eux

8) si vous travaillez sur le code de quelqu'un, vous pouvez get une meilleure compréhension du stream de l'application.

9) Vous pouvez configurer l'interface user pour iPhone 4 et iPhone 5 en appliquant le facteur de forme de la rétine à partir du storyboard, sans exécuter l'application encore et encore.

10) Les clients peuvent voir le prototype de l'application avant de commencer à le développer, ici le storyboard vous aide beaucoup.

Désavantages:

1) Il est uniquement disponible dans iOS 5+

2) StoryBoardSegues est un peu rigide et vous pouvez utiliser prepareForSegue plusieurs fois.

4) Comme IB, pas très amical avec d'autres moteurs d'affichage et boîtes à outils.

4) Il est difficile de partager des designs pour une seule vue ou un set de vues – vous devez envoyer tout ou rien.

5) Pour storyboard vous aurez besoin d'un grand écran spécialement en cas d'iPad.

6) Difficulté lors de la copy des vues d'autres applications sur le storyboard.

7) Problèmes dans le storyboard lorsque plusieurs développeurs travaillent sur le même projet en utilisant le repository git

copié à partir de certaines ressources

Avant iOS 7, les Storyboards étaient un peu chouettes mais pas indispensables. Ils ont présenté autant de problèmes qu'ils ont résolus. iOS 7 inclinait la balance vers Storyboards.

Avec iOS 8 et 9, ce n'est plus une question: utilisez des storyboards!

Le principal inconvénient du storyboard est que vous êtes complètement dépendant de XCode, et vous pourriez finir par passer des heures à tourner vos roues sur les bogues XCode. Mais XCode s'est beaucoup amélioré, et les avantages de Storyboards sont maintenant trop nombreux pour être ignorés. Prototypes de cellules de vue de table, classs de taille, support de disposition automatique et ainsi de suite.

Quelques conseils:

  • Pensez à chaque Storyboard comme un conteneur pour les controllers de vue qui appartiennent set. Ne pensez pas à cela comme une grande layout de l'set de votre application.
  • Vous pourriez avoir besoin de plus d'un Storyboard
  • Les segments ne sont vraiment utiles que pour les cas d'utilisation les plus banals – ils sont parfaits pour cela. Mais dans une application du monde réel, de nombreuses transitions se produiront à partir du code. Et c'est OK.
  • Ecrivez une catégorie pour instancier par programmation les controllers de vue depuis le ou les storyboards, tout ce que vous avez à faire est de laisser vc = SomeViewController.create (), où la méthode gère tous les détails (tirer le story board, retirer le controller de la storyboard etc. ).