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:

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 .


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


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];
}

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

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

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.