Dans les écrans complexes (View Controllers), j'avais l'habitude de séparer le tout en plus petits morceaux (je les appelle widgets). Ces widgets se composent essentiellement d'un MyWidget.h
et d'un MyWidget.m
fichier ainsi que d'un MyWidget.xib
fichier, où l'élément racine est a UIView
et la classe MyWidget est le propriétaire du fichier de l'UIView. Dans l'init de ce widget, je fais un loadNibNamed
.
Dans mon View Controller, je fais ensuite un [[MyWidget alloc] init]
, que j'ajoute à la vue principale de View Controller en tant que sous-vue. Ceci, jusqu'à présent, fonctionne parfaitement.
Je me demande maintenant comment faire la même chose avec le storyboard, car je ne peux pas vraiment commencer à glisser UIView
quelque part, je dois toujours commencer par un UIViewController
, ce que je ne veux pas.
S'il n'y a aucun moyen possible de le faire avec un Storyboard, puis-je simplement le faire à l'ancienne, en utilisant le Storyboard pour mes écrans principaux et mes segments, et utiliser un fichier .xib séparé pour définir des vues personnalisées?
la source
xib
s pour vos contrôleurs de vue séparément et non dans le story-board?Réponses:
Le fait de placer le widget / la vue dans un fichier .xib séparé fonctionne, et est particulièrement approprié si vous souhaitez référencer cette même vue à partir de plusieurs contrôleurs de vue.
Cependant, vous souhaitez parfois voir la vue / widget supplémentaire dans le même storyboard, et c'est possible. Voici comment procéder:
Sélectionnez votre contrôleur de vue dans IB (cliquez sur la barre noire sous la vue), puis faites glisser un UIView de la bibliothèque d'objets dans la barre noire:
Lorsqu'une vue est dans la barre noire, elle est instanciée comme n'importe quelle autre vue dans IB, mais n'est tout simplement pas ajoutée à votre hiérarchie de vues tant que vous ne le faites pas dans le code. Modifiez la classe de la vue pour qu'elle corresponde à votre propre sous-classe si nécessaire:
Vous pouvez le connecter à votre contrôleur de vue comme vous le feriez avec n'importe quelle autre vue:
La vue ajoutée apparaît dans la structure de votre document et vous pouvez également y connecter des actions et des références:
Maintenant, le problème qui persiste est que vous ne pouvez pas réellement voir la vue, quel que soit le nombre de fois que vous essayez de cliquer ou de double-cliquer, ce qui irait à l'encontre de l'objectif de la placer dans le même storyboard. Heureusement, je connais deux solutions de contournement.
La première solution de contournement consiste à faire glisser la vue de la barre noire vers la vue de votre contrôleur de vue, à la modifier, puis à la faire glisser dans la barre noire une fois que vous avez terminé. C'est gênant mais fiable.
L'autre solution de contournement est plus délicate, mais je la préfère car elle me permet de voir toutes mes vues en même temps:
Faites glisser un UITableView de la bibliothèque d'objets dans votre vue nouvellement ajoutée.
Faites ensuite glisser un UITableViewCell dans ce UITableView.
Une fois que vous faites cela, votre vue apparaît comme par magie sur le côté, mais vous avez un UITableView que vous ne voulez pas. Vous pouvez soit le redimensionner à 0x0, soit le supprimer et votre UIView restera (généralement) toujours visible.
Parfois, la vue secondaire sera à nouveau masquée dans IB. Vous pouvez répéter les étapes ci-dessus si vous avez supprimé l'UITableView, ou si l'UITableView est toujours dans la hiérarchie, il vous suffit de cliquer sur UITableViewCell et la vue réapparaîtra.
La deuxième méthode fonctionne pour UIViews mais pas très bien pour UIToolbars et est impossible pour UIButtons, donc la solution la plus propre que j'ai trouvée lorsque vous avez besoin d'inclure beaucoup de sous-vues différentes consiste à attacher un seul UIView secondaire à votre contrôleur de vue en tant que conteneur qui ne s'affiche jamais, mettez toutes vos vues secondaires là-dedans et utilisez l'astuce UITableViewCell pour rendre tout visible. Je redimensionne mon UITableView factice à 0x0 pour le rendre invisible. Voici une capture d'écran de tout cela:
la source
Si vous cherchez simplement à créer vos contrôleurs de vue ailleurs (et pas dans votre story-board), il existe un moyen assez simple d'accomplir cela:
1) Créez vos
CustomViewController
s (abcdController
dans le code que j'ai essayé) avec leursxib
s individuels comme d'habitude.2) Ajoutez un
UIViewController
(ou ce qui était la superclasse de votreCustomViewController
) au story-board.3) Définissez CustomClass sur au
CustomViewController
lieu deUIViewController
comme indiqué ici:4) Enfin, dans votre
viewDidLoad
, chargez la personnalisationxib
et vous avez terminé.la source
loadNibNamed
dans ce cas ... XOJe pense que vous pouvez faire quelque chose comme ça pour obtenir une instance de viewcontroller spécifique à partir de Storyboard et utiliser la vue par-dessus.
J'espère que cela t'aides
Merci Vijay
la source