8
votes

Contrôleur de vue de conteneur - informer le parent d'action

dire que j'ai un contrôleur de vue de conteneur personnalisé (MainViewController) où je fais quelque chose comme ceci:

- (void)viewDidLoad
{
    [super viewDidLoad];        

    HomeViewController *homeVC = [[HomeViewController alloc] initWithNibName:@"HomeViewController" bundle:nil];
    [self addChildViewController:homeVC];
    [self.view addSubview:homeVC.view];

}


0 commentaires

3 Réponses :


15
votes

Vous pouvez utiliser délégué ou bloquer;

à l'aide de délégué fort> p>

Créer un protocole: p>

self.block();


5 commentaires

Ok, donc il n'y a rien que je puisse tirer parti de l'API de confinement UIViewController?


Pas tout à fait sûr que ce poteau pourrait aider Vérifier cette


J'avais +1 ceci 3 fois si je pouvais. Non seulement cela a-t-il répondu à la même question pour moi, mais cela a avancé ma compréhension des blocs dix fois :)


La déclaration Typedef Le bloc a besoin d'un type comme ... Typef Void (^ ActionBlock) ();


@Ricqian, je reçois une mauvaise erreur d'accès lorsque je mettant en œuvre le bloc pour gérer l'action de la vue enfant. J'ai posté ma question ici pourriez-vous m'aider à cela?



10
votes

Il y a un autre moyen aussi ... Chaque contrôleur d'affichage dispose d'une propriété parentviewcontroller afin que vous puissiez faire cela ...

in MainViewController Définissez une méthode pour l'action que vous souhaitez effectuer ... < / p> xxx

puis dans homeviewcontroller vous pouvez faire ... xxx

htH :)


1 commentaires

Bon chemin rapide et sale ici. Utilisez la réponse sélectionnée si vous avez un peu plus de temps pour créer le protocole. Merci Pedro!



5
votes

Ceci est un modèle très courant. Le parent sera l'instance réelle qui gérera l'action, en fournissant un protocole code> et un extension par défaut .

dans SWIFT 3: P>

Vue du parent Contrôleur: P>

 @IBAction func tapGo(_ sender: Any) {
    (parent as? SomeProtocol)?.foo()
 }


1 commentaires

Merci beaucoup c'était juste ce que je cherchais :)