ContainerView avec plusieurs intégrer enchaîne
Est-il un moyen d'avoir un seul ContainerView avec plusieurs intégrer enchaîne? Le but est pour un ContainerView de tenir un peu différent ViewControllers en fonction de ce que les boutons ont été pressées, un seul va être visible à un moment donné. Je veux utiliser embed enchaîne alors que dans Interface Builder les story-boards sont automatiquement affichés à la même taille que le ContainerView.
Je me rends compte que je peux redimensionner manuellement les autres ViewControllers dans InterfaceBuilder, mais je veux le dimensionnement automatique fourni par l'incorporer des enchaînements. Si une autre façon de faire qui est disponible, qui serait bien aussi. N'ayant pas le point de vue de la charge sur viewDidLoad est fine comme mentionné précédemment, le ViewController peut changer en fonction de ces touches enfoncées.
- Je constate que ce n'est pas ce que vous avez demandé, mais comme une autre solution, que diriez-vous d'avoir plusieurs ContainerViews, de chevauchements et de tailles identiques, chacune avec leurs propres enchaînements. Ensuite, dans le code, effectuer la bonne séquence à l'aide de
[self performSegueWithIdentifier:]
en fonction de l'enfant UIViewController que vous souhaitez afficher. Au moins, de cette façon, vous gardez votre auto-dimensionnement, vous gardez vos connexions de l'IB et vous gardez votreprepareForSegue
logique.
Vous devez vous connecter pour publier un commentaire.
Non, il n'y a aucun moyen d'avoir de multiples intégrer enchaîne à un conteneur de vue. Une manière de faire de l'ensemble de l'installation de l'IB, serait de rendre le contrôleur embarqué un UITabBarController (avec la barre d'onglets cachés). Vous pouvez avoir autant de contrôleurs dans les onglets que vous le souhaitez, et de basculer dans le code à l'aide de la propriété selectedIndex de UITabBarController.
J'ai trouvé ce merveilleux article qui explique exactement comment faire: http://sandmoose.com/post/35714028270/storyboards-with-custom-container-view-controllers
vous obtenez votre conteneur et peut appeler n'importe quelle vue contrôleur derrière, il y a un peu de configurer tout ce qui est lié, mais une fois terminé, vous obtenez un encore utilisable storyboard.
Je reconnais que cette question est un peu vieux, mais je voulais répondre dans le cas où vous êtes toujours à la recherche ou à d'autres gens à trouver ce. J'ai eu un problème similaire et j'ai travaillé autour d'elle.
En bref, vous aurez trois couches:
- d'un point de vue externe de contrôleur ("ExternalViewController")
- un view controller manager ("ViewControllerManager")
- l'enfant de voir les contrôleurs que vous voulez réellement à la commutation entre les ("ChildViewController")
Utiliser un conteneur de vue en ExternalViewController avec un embed segue à la ViewControllerManager. ViewControllerManager lui-même serait alors de tenir d'autres ChildViewControllers par programmation comme décrit dans cette documentation d'Apple, en particulier la section sur l'ajout et le retrait d'un enfant.
Lorsque vous ajoutez un enfant de-vue-contrôleur, définir son image pour être le même que le ViewControllerManager de l'image (puisque vous êtes en train de faire cela à l'intérieur de la ViewControllerManager, la valeur de l'enfant de l'image d'égal à soi-même.vue.image). Vous aurez également besoin d'un peu de logique et un contrôle externe pour faire la commutation à l'intérieur de ExternalViewController, bien sûr.
Espérons que cette aide!
Oui, j'ai été en mesure de réaliser ce que vous cherchez inspiré par @rdelmar post. Ce que vous devez faire est d'embarquer une
UITabBarViewController
dans votre conteneur de vue. Ensuite, par programmation, vous sélectionnez le contrôleur vous le souhaitez à présent. Vous pouvez également masquer la barre d'onglets.Si vous le souhaitez, vous pouvez également masquer les barres d'onglets vu dans le storyboard fichier
Vous pouvez choisir la vue du contrôleur que vous souhaitez présenter, par dérivation de l'UITabBarController:
Vous pouvez masquer la barre d'onglet dans votre vue-contrôleur en appelant
self.tabBarController?.tabBar.hidden = true
dans le viewDidLoad().self.tabBarController?.selectedIndex = 5
dansviewDidLoad()
mais il ne fonctionne pas ):J'ai réalisé qu'en faisant usage de
-shouldPerformSegueWithIdentifier:sender:
. J'ai un conteneur qui est passé d'un objet et selon le type de cet objet, décide de l'enfant-vue-contrôleur de montrer.La structure semble un peu plus compliqué, mais permet l'affichage de base du contrôleur d'ignorer les différents types de tâches que j'ai, de laisser le conteneur de-vue-contrôleur.
Le conteneur de-vue-contrôleur a ensuite conteneurs multiples points de vue qui enchaîne sont uniquement effectuées en fonction du type de tâche.
Je ne sais pas si vous pouvez réellement les intégrer enchaîne manuellement en appelant
-performSegueWithIdentifier:sender:
mais qui pourrait aussi être une possibilité.J'ai du mal avec ce pour un long moment, trop. J'ai eu le cas où j'ai eu différents, mais similaires incorporés vue de la table des contrôleurs que j'ai voulu montrer en fonction d'un paramètre qui a été définie dans la séquence de la vue-contrôleur. Ce qui a fonctionné a été de mettre dans le conteneur embarqué avec un IBOutlet en-vue-contrôleur. Le conteneur peut avoir de contraintes de taille définie dans l'IB. Cependant, il ne faut pas incorporer enchaîne dans IB. Puis dans le viewDidLoad, j'ai ajouter par la vue correcte de contrôleur et d'épingler les bords de l'intégrer conteneur.
Le cœur de cette approche est indiqué dans le code suivant (Swift 4):
Dans le ColorVC, on voit le conteneur IBOutlet et la "couleur" paramètre défini par la table principale-vue-contrôleur. Le RedTableVC, GreenTableVC, et BlueTableVC sont tous les sous-classé de ColorTableVC qui est sous-classés de UITableViewController. Le patrimoine commun me permet d'utiliser un "colorTableVC" variable à point à toute de la instancié contrôleurs. (Pas tout à fait nécessaire). Mais ce n'est éviter la duplication de code ci-dessous pour ajouter le point de vue de la hiérarchie et la broche sur le nouveau contrôleur pour le conteneur de vue. En haut, j'ai fait une extension sur UIView à la broche de vue de ses parents bords.
L'image suivante montre comment le projet et en particulier le point de vue du contrôleur sur le droit a été mis en place au bureau de l'IB. Pour cet exemple, j'ai fait la hauteur de la "embedded" contrôleur de la moitié de la hauteur de la vue principale de contrôleur - ainsi, lorsque vous faites pivoter l'appareil, on peut voir que les contraintes définies dans l'IB sont effectivement appliquées.