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:
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:
– 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.
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) .
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.
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.
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.
UITableView
( plus d'infos ) 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.
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]; }
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) }
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
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
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.
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 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: