J'ai une vue conteneur que j'ai insérée dans mon storyboard. Il y a une merveilleuse petite flèche qui représente la séquence d'intégration dans une autre scène. L'objet de niveau supérieur de cette scène est contrôlé par un UIViewController
personnalisé. Je veux appeler une méthode implémentée dans ma classe personnalisée. Si j'ai accès au conteneur, comment puis-je obtenir une référence à ce qu'il contient?
Vous pouvez utiliser prepareForSegue
, une méthode dans UIViewController
, pour accéder à n'importe quel UIViewController
auquel votre contrôleur de vue actuel a accès, cela inclut embed
séquences.
De la documentation sur prepareForSegue
:
L'implémentation par défaut de cette méthode ne fait rien. Votre contrôleur de vue remplace cette méthode lorsqu'il doit transmettre des données pertinentes au nouveau contrôleur de vue. L'objet segue décrit la transition et inclut des références aux deux contrôleurs de vue impliqués dans la séquence.
Dans votre question, vous avez mentionné la nécessité d'appeler une méthode sur votre contrôleur de vue personnalisé. Voici un exemple de la façon dont vous pouvez le faire:
1. Donnez à votre enchaîné d'intégration un identifiant. Vous pouvez le faire dans l'Interface Builder en sélectionnant votre séquence, en accédant à Editeur d'attributs et en regardant sous Storyboard Embed Segue .
2. Créez vos classes quelque chose comme:
Une référence est conservée vers embeddedViewController
afin que myMethod
puisse être appelé plus tard. Il est déclaré être une option implicitement déballée car il n'a pas de sens de lui donner une valeur initiale non nulle.
// This is your custom view controller contained in `MainViewController`.
class CustomViewController: UIViewController {
func myMethod() {}
}
class MainViewController: UIViewController {
private var embeddedViewController: CustomViewController!
override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
if let vc = segue.destination as? CustomViewController,
segue.identifier == "EmbedSegue" {
self.embeddedViewController = vc
}
}
// Now in other methods you can reference `embeddedViewController`.
// For example:
override func viewDidAppear(animated: Bool) {
self.embeddedViewController.myMethod()
}
}
. Définissez les classes de votre UIViewControllers
dans IB à l'aide de Inspecteur d'identité . Par exemple:
Et maintenant, tout devrait fonctionner. J'espère que ça t'as aidé!
La réponse d'ABaker donne aux parents un excellent moyen d'en apprendre davantage sur l'enfant. Pour que le code de l'enfant atteigne le parent, utilisez self.parent
(ou dans ObjC, parentViewController
).