Exemplos de controlador de visualização de contêiner [fechado]

94

Alguém pode me indicar bons exemplos de criação de um controlador de visualização personalizada como um controlador de visualização de contêiner? A única documentação que posso encontrar são alguns parágrafos na Referência de classe UIViewController . Sinto que preciso de um pouco mais de informações do que isso e um exemplo de implementação seria bom. O Google não encontrou absolutamente nada.

Estou especificamente interessado no método:

transitionFromViewController:toViewController:duration:options:animations:completion:
Undistraction
fonte
Você encontrou outras fontes para isso além da hipercripta mencionada?
John Estropia,
1
Ainda não. Vou fazer outra escavação mais tarde hoje, se tiver tempo. Parece bizarro que haja tão poucas informações sobre ele, dada a sua importância e utilidade. Eu me pergunto se ele tem bugs e será melhor documentado quando for melhorado.
Undistraction
3
Isso é extremamente confuso para mim também. Por exemplo, a visualização pode ter apenas um controlador incorporado. E se você quiser alternar o controlador nessa visualização de contêiner?
user4951
@JanakNirmal Muito obrigado.
Undistraction
posso ocultar a visualização do contêiner
Maulik shah

Respostas:

51

A melhor coisa que encontrei até agora é o WWDC 2011 Session Video Session 102 - Implementing UIViewController Containment .

hipercriptar
fonte
1
Idem. Não é meu exemplo de código de demonstração favorito, mas ele implementa adequadamente os contêineres de VC, bem como o gerenciamento de memória - é realmente importante que seus controladores de visualização filho sejam liberados quando não estiverem mais visíveis.
memmons
1
Infelizmente, a demonstração de como usar o ContainerViewController não funcionou porque ele não tinha o e-mail configurado em seu iPad :-(
Ken M. Haggerty,
Essa sessão tem amostra de código?
user4951
você tem o código de amostra agora, eu preciso porque eu tentei muito, mas ainda não soluto.
iPhone programaticamente
37

Além da sessão de vídeo WWDC Session 102 - Implementing UIViewController Containment que hipercriptografe já mencionada, a sessão Apple WWDC 2012 sobre "The Evolution of View Controllers on iOS" também cobre este tópico e o código de exemplo faz parte do pacote de código de amostra:

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

Também há um exemplo aqui: https://github.com/toolmanGitHub/stackedViewControllers

JosephH
fonte
2
1 mencionando onde conseguir aquele pacote de código maldito. Eu tenho procurado por isso.
user4951
6
Mais uma vez, por que a Apple não pode colocar o código das sessões WWDC em suas páginas de membros?
axello
+1, você se importaria de compartilhar, como obter este caminho do código-fonte?
Janak Nirmal
1
@JanakNirmal qual código-fonte você está tendo problemas para obter? Para obter o código WWDC, basta seguir o link dmg e fazer o login com seu id de desenvolvedor da 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];
}

esta IBAction dispara a transição entre dois VCs:

-(IBAction)button:(id)sender {
    [self transitionFromViewController:vc1 
                      toViewController:vc2 
                              duration:0.5    
                               options:UIViewAnimationOptionTransitionCurlDown 
                            animations:nil 
                            completion:nil];
}
Sonnywang
fonte
1
Este é um excelente exemplo. Mas o gerenciamento de memória, neste caso, pode ser aprimorado: stackoverflow.com/a/8453677/849616 para uma solução mais adequada.
Vive
1
Não que você esteja errado. Mas [self addChildViewController: vc1]; não faz sentido. O Container VC pode ter VÁRIOS controladores de visualização de contêiner.
user4951
@Vive Cheguei a um ponto em meu projeto em que estou preocupado com o gerenciamento de memória. Você poderia me dizer o que especificamente o link que você postou faz melhor em termos de gerenciamento de memória? Eu sou muito novo e tenho dificuldade em ver as discrepâncias
jacobronniegeorge
10

Isso poderia:

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

Ser suficiente para suas necessidades?

Rui Peres
fonte
4
Na verdade, eu já tinha encontrado isso, mas infelizmente está escrito sobre Ios4, mas 5 fez alterações significativas. A Apple agora suporta explicitamente a criação de View Controller Containers personalizados, embora eles não pareçam querer nos ajudar a descobrir como usá-los. Obrigado.
Undistraction
Você pode me mostrar onde eles dizem isso. Não duvidando de você, apenas curioso, porque tenho lutado contra isso também.
Rui Peres,
4
Não se preocupe. Procurei no código suas classes de contêiner e nenhuma delas usa qualquer um dos seguintes métodos: addChildViewController :, removeFromParentViewController, transiçãoFromViewController: toViewController: duração: opções: animações: conclusão :, willMoveToParentViewController: e didMoveToParentViewController: que são todos mencionados em Documentação ios5 para UIViewController.
Undistraction
3

Estes são meus tutoriais / exemplos favoritos (prontos para iOS7) sobre o assunto (todos os três têm o código-fonte disponível no github):

Ver contenção do controlador

Transições de controlador de visualização de contêiner personalizado

Transições do controlador de visualização de contêiner personalizado interativo

E então, é claro, a Apple oferece um artigo completo sobre o assunto que considero inestimável:

Criação de controladores de visualização de contêiner personalizados

radiovisual
fonte