2013-01-16 2 views
1

J'ai un conteneur avec 4 boutons de navigation, chacun représentant 4 enfants vc individuels. J'ai réussi à implémenter le code pour aller du conteneur à l'enfant vc en utilisant addchildviewcontroller mais maintenant je ne sais pas comment revenir en arrière.Retour du contrôleur de vue enfant au conteneur

Conteneur VC: 4 Boutons naviguant vers 4 contrôleurs de vue enfant séparés.

Lorsque vous cliquez sur le bouton, la vue actuelle est remplacée par la vue du VC enfant. Par conséquent, les boutons ne sont plus visibles. Pour cette raison, l'enfant VC a un bouton d'accueil spécialement conçu pour retourner au conteneur VC où résident les 4 boutons.

Exemple de 1 de 4 boutons Appel d'une fonction pour afficher enfant VC:

- (IBAction)btn_bus:(id)sender { 
    [self addMyController:businessVC_]; 
} 

Ajout d'contrôleurs de vue des enfants, fonction appelée lorsque le bouton est cliqué:

-(void)addMyController:(UIViewController *)myController{ 
    [self addChildViewController:myController]; 
    [self.view addSubview:myController.view]; 
    [myController didMoveToParentViewController:self]; 

}

Question 1: Comment piègez/effectuez des fonctions sur un VC enfant. Par exemple, comment puis-je obtenir le bouton d'accueil sur mon enfant de VC pour faire maintenant l'enfant vc pour se supprimer et afficher à nouveau l'écran de conteneur/nav?

Question 2: Où ces procédures doivent-elles se dérouler dans le conteneur personnalisé VC ou VC enfant?

Question 3: Existe-t-il en particulier un guide ou un tutoriel qui montre comment la relation entre IBAction et IBOutlet est gérée dans une relation parent-enfant?

+0

addChildViewController en lui-même n'est pas suffisant pour afficher un contrôleur de vue enfant - vous devez publier le code que vous avez utilisé. Où sont les boutons de navigation? Sont-ils dans la vue du contrôleur de conteneur? Sont-ils toujours visibles lorsque vous avez une vue des enfants à l'écran? – rdelmar

+0

@rdelmar J'ai édité le poste – jacobronniegeorge

Répondre

3

Si vous ne voulez pas d'animation, en remontant est fait comme ça, avec le code étant dans le contrôleur de vue parent:

-(void)removeChild:(UIViewController *) child { 
    [child didMoveToParentViewController:nil]; 
    [child.view removeFromSuperview]; 
    [child removeFromParentViewController]; 
} 

Dans le contrôleur de l'enfant, vous appelleriez comme ceci:

-(IBAction) goBackToContainer { 
    [(ParentClassNameHere *)self.parentViewController removeChild:self]; 
} 

En général, l'ajout et la suppression d'enfants doivent être effectués à partir du contrôleur de conteneur personnalisé. Je ne suis pas sûr de ce que vous voulez dire par votre troisième question. IBActions et points de vente appartiennent à la vue du contrôleur qui contient l'élément de l'interface utilisateur. Votre conception globale est différente de la façon dont Apple fait ses contrôleurs de conteneur. Les conteneurs tels que les navigateurs et les contrôleurs de barre d'onglets n'ont pas de vue sur laquelle retourner, à l'exception des vues de navigation ou de barre d'onglets - l'une des vues est toujours à l'écran. Je ne sais pas pourquoi vous faites un contrôleur personnalisé dans ce cas, car sa conception ressemble à peu près à un contrôleur de barre d'onglets.

+0

Je n'aime pas la conception de ces deux ... Je veux avoir un look personnalisé sur l'écran – jacobronniegeorge

+0

le code n'a pas fonctionné. le code indique qu'il n'y a pas de fonction removeChild. – jacobronniegeorge

+0

@jacobronniegeorge, Vous devez ajouter la méthode removeChild: au fichier .h du contrôleur parent. C'est une méthode que j'ai inventée, pas une méthode Cocoa. Que voulez-vous dire par "Je n'aime pas la conception de ces deux"? Conception de quoi? – rdelmar

2

Il ya une petite erreur dans la réponse précédente et comme je n'ai pas assez de réputation pour laisser un commentaire. La première ligne devrait être:

[child willMoveToParentViewController:nil];

Cela dit à l'enfant qu'il est supprimé.

Dans les documents Apple, recherchez Création de contrôleurs de vue de conteneur personnalisés.

Et UIViewController.h a une très bonne documentation.

Questions connexes