L'accès Conteneur de-Vue-Contrôleur de Parent iOS
dans iOS6 j'ai remarqué que le nouveau Conteneur de Vue mais je ne suis pas tout à fait sûr de savoir comment y accéder du contrôleur à partir du contenant de vue.
Scénario:
Je veux accéder aux étiquettes en Alerte-vue-contrôleur de la vue-contrôleur qui abrite le conteneur de vue.
Il y a une séquence entre eux, puis-je l'utiliser?
- entièrement expliquée ici, pour les conteneurs moderne vues: stackoverflow.com/a/23403979/294884
Vous devez vous connecter pour publier un commentaire.
Oui, vous pouvez utiliser la séquence pour obtenir l'accès de l'enfant-vue-contrôleur (et son point de vue et les sous-vues). Donner la séquence d'un identifiant (comme
alertview_embed
), en utilisant les Attributs de l'inspecteur de Storyboard. Alors le parent-vue-contrôleur (l'un logement du conteneur de vue) de mettre en œuvre une méthode comme ceci:isKindOfClass
à la place.Vous pouvez le faire simplement avec
self.childViewControllers.lastObject
(en supposant que vous avez un enfant, sinon utilisezobjectAtIndex:
).childViewControllers
"trop tôt"pour Swift Programmation
vous pouvez écrire comme cela
La
prepareForSegue
approche fonctionne, mais il se fonde sur la séquence de l'identificateur de la magie de la chaîne. Peut-être il ya une meilleure façon.Si vous connaissez la classe de la VC que vous êtes après, vous pouvez le faire très facilement à une propriété calculée:
Cela repose sur la
childViewControllers
. Alors que je suis d'accord, il pourrait être fragile à s'appuyer sur le premier, en nommant la classe que vous cherchez rend ce semble assez solide.return childViewControllers.filter { $0 is CamperVanViewController }.first
en une seule lignechildViewControllers.flatMap({ $0 as? CamperVanViewController }).first
qui je pense est un peu mieux, car il jette et se débarrasse de toute nils.first(where:)
.childViewControllers.first(where: { $0 is CamperVanViewController })
Une mise à jour de réponse pour Swift 3, à l'aide d'une propriété calculée:
Cette seule itération de la liste des enfants jusqu'à ce qu'il atteigne le premier match.
self.childViewControllers
est plus utile lorsque vous avez besoin de contrôle de la société mère. Par exemple, si le contrôleur enfant est une vue de la table et vous souhaitez recharger avec force ou de modification d'une propriété par l'intermédiaire d'un bouton du robinet ou de tout autre événement sur Parent-Vue-Contrôleur, vous pouvez le faire en accédant à ChildViewController de l'instance et non via prepareForSegue. Les deux ont leurs applications dans différentes manières.Il y a un autre chemin à l'aide de Swift instruction switch sur le type de la vue-contrôleur :
- Je utiliser un Code comme:
Au cas où quelqu'un est à la recherche d' Swift 3.0,
viewController1, viewController2 et ainsi de suite seront alors accessibles.
Avec générique, vous pouvez faire quelques choses douces. Ici est une extension de Tableau:
Ensuite, vous pouvez le faire dans votre viewController:
vous pouvez écrire comme cela