Exemples de contrôleur de vue de conteneur [fermé]

94

Quelqu'un peut-il me montrer de bons exemples de création d'un contrôleur de vue personnalisé en tant que contrôleur de vue de conteneur? La seule documentation que je peux trouver est quelques paragraphes dans la référence de classe UIViewController . Je sens que j'ai besoin d'un peu plus d'informations que cela et un exemple de mise en œuvre serait bien. Google n'a rien révélé du tout.

Je suis particulièrement intéressé par la méthode:

transitionFromViewController:toViewController:duration:options:animations:completion:
Undistraction
la source
Avez-vous trouvé d'autres sources pour cela que celle mentionnée par hypercrypt?
John Estropia
1
Pas encore. Je vais faire une autre fouille plus tard aujourd'hui si j'ai le temps. Il semble étrange qu'il y ait si peu d'informations à son sujet étant donné son importance et son utilité. Je me demande si c'est bogué et sera mieux documenté quand il sera amélioré.
Undistraction
3
C'est extrêmement déroutant pour moi. Par exemple, la vue ne peut avoir qu'un seul contrôleur intégré. Et si vous souhaitez activer le contrôleur sur cette vue de conteneur?
user4951
@JanakNirmal Très obligé.
Undistraction
puis-je masquer la vue du conteneur
Maulik shah

Réponses:

51

La meilleure chose que j'ai trouvée jusqu'à présent est la session vidéo 102 de la session WWDC 2011 - Implémentation du confinement UIViewController .

hypercrypter
la source
1
Idem. Ce n'est pas mon exemple de code de démonstration préféré, mais il implémente correctement les conteneurs VC ainsi que la gestion de la mémoire - il est vraiment important que vos contrôleurs de vue enfants soient libérés lorsqu'ils ne sont plus visibles.
memmons
1
Malheureusement, la démo d'utilisation de ContainerViewController n'a pas fonctionné car il n'avait pas de configuration de messagerie sur son iPad :-(
Ken M. Haggerty
Cette session a-t-elle un exemple de code?
user4951
avez-vous l'exemple de code maintenant, j'en ai besoin parce que j'ai beaucoup essayé mais pas encore de solution.
iPhone par programmation du
37

Outre la session vidéo 102 de la session WWDC - Implémentation du confinement UIViewController qui hypercrypte déjà mentionné, la session Apple WWDC 2012 sur «L'évolution des contrôleurs de vue sur iOS» couvre également ce sujet et l'exemple de code fait partie de l'exemple de package de code:

https://developer.apple.com/devcenter/download.action?path=/wwdc_2012/wwdc_2012_sample_code/wwdc_2012_session_code.dmg

Il y a aussi un exemple ici: https://github.com/toolmanGitHub/stackedViewControllers

JosephH
la source
2
+1 indiquant où trouver ce foutu paquet de code. Je l'ai parcouru.
user4951
6
+1 encore, pourquoi o pourquoi Apple ne peut-il pas mettre le code des sessions WWDC sur leurs pages membres?
axello
+1, cela vous dérangerait-il de partager, comment obtenir ce chemin de code source?
Janak Nirmal
1
@JanakNirmal quel code source avez-vous du mal à obtenir? Pour obtenir le code WWDC, suivez simplement le lien dmg et connectez-vous avec votre identifiant de développeur Apple.
JosephH
17
- (void)viewDidLoad{
    [super viewDidLoad];

    // I put self in a Navigation VC so we can use its right navigationbar 
    // item for triggering the transition
    self.navigationItem.rightBarButtonItem = 
     [[[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemEdit 
                                                    target:self 
                                                    action:@selector(button:)] 
                                                                  autorelease];

    // create test1 and test2 instance (subclass UIViewController and 
    // also need to define their own nibs)
    vc1 = [[test1 alloc]initWithNibName:@"test1" bundle:nil];
    vc2 = [[test2 alloc]initWithNibName:@"test2" bundle:nil];

    //add to the container vc which is self    
    [self addChildViewController:vc1];
    [self addChildViewController:vc2];

    //the entry view (will be removed from it superview later by the api)
    [self.view addSubview:vc1.view];
}

cette IBAction déclenche la transition entre deux VC:

-(IBAction)button:(id)sender {
    [self transitionFromViewController:vc1 
                      toViewController:vc2 
                              duration:0.5    
                               options:UIViewAnimationOptionTransitionCurlDown 
                            animations:nil 
                            completion:nil];
}
sonnywang
la source
1
Ceci est un excellent exemple. Mais la gestion de la mémoire dans ce cas peut être améliorée: stackoverflow.com/a/8453677/849616 pour une solution plus adaptée.
Vive le
1
Non pas que vous vous trompiez. Mais [self addChildViewController: vc1]; n'a pas de sens. Le conteneur VC peut avoir PLUSIEURS contrôleurs de vue de conteneur.
user4951
@Vive J'ai atteint un point de mon projet où je suis préoccupé par la gestion de la mémoire. Pouvez-vous me dire ce que le lien que vous avez posté fait de mieux en termes de gestion de la mémoire? Je suis très nouveau et j'ai du mal à voir les écarts
jacobronniegeorge
10

Cela pourrait-il:

http://subjective-objective-c.blogspot.com/2011/08/writing-high-quality-view-controller.html

Être suffisant pour vos besoins?

Rui Peres
la source
4
En fait, j'avais déjà trouvé cela, mais malheureusement, il est écrit sur Ios4, mais 5 a apporté des changements importants. Apple prend désormais explicitement en charge la création de conteneurs View Controller personnalisés, bien qu'ils ne semblent pas vouloir nous aider à comprendre comment les utiliser. Merci quand même.
Undistraction
Pouvez-vous me montrer où ils disent cela. Je ne doute pas de toi, juste curieux, car j'ai aussi du mal avec ça.
Rui Peres
4
Pas de soucis. J'ai parcouru le code pour ses classes de conteneur et aucune d'entre elles n'utilise l'une des méthodes suivantes: addChildViewController :, removeFromParentViewController, transitionFromViewController: toViewController: durée: options: animations: achèvement :, willMoveToParentViewController: et didMoveToParentView mis à jour sont mentionnés allController: et didMoveToParentView mis à jour Documentation ios5 pour UIViewController.
Undistraction