web-dev-qa-db-fra.com

UIView en dehors d'un View Controller dans un Storyboard

Je suis coincé avec une question à laquelle je ne trouve pas de réponse dans la documentation officielle, sur Stackoverflow ou sur Google.

Je suis un développeur iOS expérimenté mais nouveau dans Storyboards. Je voudrais instancier une vue sur le viewcontroller actuel, une vue que, dans une NIB, je dessinerais en dehors du viewController et attacherais une sortie pour y faire référence dans le code et appeler quelque chose comme addSubview: ou ainsi. Il est utile de dessiner une superposition ou, dans mon cas actuel, une vue de légende à utiliser dans un délégué MapView. Mais je ne peux pas comprendre comment je peux le faire dans un Storyboard.

Je n'arrive pas à avoir une vue en dehors d'un viewcontroller, et les vues à l'intérieur du viewcontroller doivent soit être des sous-vues de la vue du contrôleur, soit ne pas être visibles du tout dans Interface Builder (ce qui est correct lorsque vous faites glisser une vue composée à l'extérieur). , dans une NIB traditionnelle, mais tout un problème si vous avez besoin d'ajuster le moindre détail).

Une indication sur quoi faire ou où chercher? Merci.

35
KPM

Il semble qu'il n'y ait aucun moyen de le faire. Voir commentaire de Jason et cette question traitant du même problème, mais dans un contexte différent.

Cependant, je me suis rendu compte plus tôt en réfléchissant aux implications de mon problème - comme j'ai commencé à l'expliquer dans mon commentaire précédent avant de décider que cela valait une réponse complète - il est logique de séparer la conception d'une coutume vue depuis la conception d'un flux d'application. Ainsi, le fait qu'il ne soit pas possible de concevoir des vues personnalisées dans les storyboards peut très bien être ... par conception.

Une vue personnalisée (qui est un composant réutilisable) est très différente d'un contrôleur de vue (qui représente une scène dans le storyboard de votre application). C'est la même chose qu'un personnage et une scène, dans un film. Vous ne voulez pas concevoir votre personnage dans votre scène, même s'il vous arrive d'utiliser ce personnage dans une seule scène. C'est fortuit si vous l'utilisez dans une seule scène, mais pas indispensable. Il faut donc que ce soit séparé.

Le fait que vous souhaitiez utiliser Interface Builder pour concevoir votre vue personnalisée n'est que n détail d'implémentation qui devrait être encapsulé dans votre classe. Le storyboard d'application n'a pas besoin de savoir, et encore moins de gérer, comment vous gérez l'implémentation particulière de votre vue réutilisable.

Hmm, j'aurais aimé avoir plus de cette marque d'interrogatoire :)

30
KPM

Vous pouvez utiliser une vue de conteneur, c'est comme une vue normale (vous pouvez affecter une IBOutlet UIView) mais vous pouvez la définir en dehors de votre UIViewController.

The "container view" is outside the view, but i can assign it to a IBOutlet UIViewYou can design it

26
Josejulio

Je me demandais la même chose moi-même, et en fait j'ai réussi à faire en sorte que cela se produise, bien qu'après avoir déconné, ce soit parti. J'ai un Nav Controller, un View Controller et deux vues. J'avais développé les vues dans une plume séparée et les ai importées dans ce projet. Pendant que je connectais des boutons, la vue dans laquelle je travaillais est soudainement apparue à côté de mon contrôleur de vue. Malheureusement, en essayant de faire apparaître l'autre vue, je l'ai en quelque sorte perdue et je ne sais pas comment la récupérer. Il ne semble pas que vous puissiez faire glisser une vue vers le storyboard, uniquement dans un contrôleur de vue. Cependant, si j'ai pu le faire une fois, cela doit être reproductible.

2
Joel Wehr