Interface Builder. Como faço para substituir Programático de Visualização de Controladores com ViewControllers IB?

StackOverflow https://stackoverflow.com/questions/1601835

Pergunta

Como eu mover-se mais e mais da minha construção UI de XCode para IB há um obstáculo restante eu preciso para limpar.

Atualmente, eu criar meus viewControllers personalizados no Xcode com initializers personalizados. Eles normalmente têm um monte de ivars que são definidas durante a inicialização via parâmetros passados. Eu realmente gostaria de mover tanto disto como eu posso para IB.

Alguém poderia explicar cuidadosamente para mim - ou, melhor, me aponte para código - como replicar a abordagem XCode de passar parâmetros via costume initializer em IB -. Presumivelmente via IBOutlet

Agradecemos antecipadamente.

Cheers, Doug

UPDATE:

A scenerio típico é o meu AppDelegate vai sair para a rede, pegar alguns dados - NSMutableData, e, em seguida, passar uma referência a uma raiz viewController - tipicamente um TableViewController -. Que é empurrado na pilha viewController de um navigationController

Quando uma célula é seleccionada uma secondViewController é Alloc / init'ed e um subconjunto dos dados são passados ??ao mesmo. O secondViewController vai para a rede para um pouco mais de dados, constrói uma hierarquia de vista, mãos bits dos dados recuperados para cada subexibição e então cada subexibição é enviado mensagens com setNeedsDisplay para processar os dados.

É estes dados hierárquicos passagem que eu quero entregar para IB é possível.

Foi útil?

Solução

Você ainda pode ter um inicializador de costume. No entanto, dentro deste inicializado você vai chamar -[initWithNibName:@"yourNibName" bundle:bundle]. Você vai conectar suas variáveis ??de instância relacionada UIKit (UILabel, UIButton, etc.) no Interface Builder e, portanto, não terá que instanciar os objetos em seu inicializador. Outras variáveis ??de instância (cordas, dicionários, objetos personalizados, etc.) você vai instanciar e pôr em seu inicializador.

Além disso, mantenha em mente que a manipulação de sua UIKit variáveis ??relacionadas como a definição de texto do rótulo, ou definir a posição de um UIView, deve ser feito no método viewDidLoad uma vez que estes objetos podem não ter sido totalmente criado no momento initializer é execução.

Deixe-me saber se você precisar de mais informações.

Outras dicas

Vamos dizer que temos MyViewController que se estende UIViewController e MyViewControllerParameter que é um dos nosso costume objetos passamos para MyViewController na inicialização. MyViewController tem um IBOutlets de tipo MyViewControllerParameter definida na mesma. Queremos colocar MyViewController em outra exibição que contém, ParentView.xib. ParentView.xib é propriedade de ParentViewController.m e criado em outro lugar. Nós duplo clique ParentView.xib no XCode para lançar Interface Builder. Em seguida, arraste um "objeto" da Biblioteca Vista (eu acredito que você abrir a vista Biblioteca com o Cmd + Shift + L se não for aberto por padrão) na janela do documento. (Esta é a janela ativada por Cmd + 0).

Um "objeto" é uma arbitrária Widget encontrado na biblioteca (identificado por um ícone de cubo de ouro maciço) que pode representar qualquer coisa em seu projeto. Depois de termos colocado o novo objeto na janela do documento, digite Cmd + 4 para abrir o Inspector Janela Indentity. No campo de texto no topo, podemos digitar o nome do nosso parâmetro controlador de vista, "MyViewControllerParameter". Em seguida, encontrar o ViewController widget na biblioteca e soltá-lo na janela do documento. Nós abrir o inspetor de Atributo (Cmd + 1) e defina o nome nib para "MyView.xib". Isso deve fazer com CocoaTouch para MyViewController carga usando as definições em "MyView.xib".

Abra o inspetor de identidade e definir o atributo de classe para MyViewController. Passado, botão direito do mouse ou controle clique (ou toque dois dedos se tenha configurado corretamente o trackpad em nosso macbookpro) MyViewController na janela do documento. Isso irá abrir uma janela mostrando todos os IBOutlets em MyViewController. Arraste uma linha do pequeno círculo aberto próximo à saída MyViewControllerParameter e soltá-lo no objeto MyViewControllerParameter sentado na janela do documento. Conectar esses pontos é como você definir parâmetros entre objetos usando construtor de interface.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top