Em telas complexas (View Controllers) eu costumava separar tudo em pedaços menores (eu os chamo de widgets). Estes elementos consistem, basicamente, de um MyWidget.h
e de um MyWidget.m
arquivo, bem como um MyWidget.xib
arquivo, onde o elemento raiz é uma UIView
ea classe MyWidget é o proprietário do arquivo da UIView. No init deste widget eu faço a loadNibNamed
.
Em meu View Controller, faço um [[MyWidget alloc] init]
, que adiciono à visualização principal do View Controller como uma subvisão. Isso, até agora, funciona perfeitamente.
Agora estou me perguntando como fazer o mesmo com o storyboard, porque não posso realmente começar a arrastar um UIView
lugar, sempre tenho que começar com um UIViewController
, o que não quero.
Se não houver uma maneira possível de fazer isso com um Storyboard, posso simplesmente fazer da maneira antiga, usando o Storyboard para minhas telas principais e segues, e usar um arquivo .xib separado para definir visualizações personalizadas?
fonte
xib
s para seus controladores de visualização separadamente e não no storyboard?Respostas:
Colocar o widget / visualização em um arquivo .xib separado funciona e é apropriado, especialmente se você quiser fazer referência a essa mesma visualização de vários controladores de visualização.
No entanto, às vezes você deseja ver a visualização / widget adicional dentro do mesmo storyboard, e isso é possível. Veja como você faz:
Selecione seu controlador de visualização em IB (clique na barra preta abaixo da visualização) e arraste um UIView da Biblioteca de Objetos para a barra preta:
Quando uma visualização está na barra preta, ela é instanciada como qualquer outra visualização no IB, mas não é adicionada à sua hierarquia de visualização até que você faça isso no código. Altere a classe da visualização para corresponder à sua própria subclasse, se necessário:
Você pode conectá-lo ao seu controlador de visualização como faria com qualquer outra visualização:
A visualização adicionada é exibida no Esboço do documento e você também pode conectar ações e referências:
Agora, o problema que permanece é que você não pode realmente ver a visualização, não importa quantas vezes você tente clicar ou clicar duas vezes, o que anularia todo o propósito de colocá-la no mesmo storyboard. Felizmente, eu conheço duas soluções alternativas.
A primeira solução alternativa é arrastar a visualização da barra preta de volta para a visualização do controlador de visualização, editá-la e arrastá-la de volta para a barra preta quando terminar. Isso é problemático, mas confiável.
A outra solução alternativa é mais complicada, mas eu prefiro porque ela me permite ver todas as minhas visualizações ao mesmo tempo:
Arraste um UITableView da Biblioteca de Objetos para a visualização recém-adicionada.
Em seguida, arraste um UITableViewCell para esse UITableView.
Depois de fazer isso, sua visualização aparece magicamente ao lado, mas você tem um UITableView que não deseja. Você pode redimensionar para 0 x 0 ou pode excluí-lo e seu UIView (geralmente) permanecerá visível.
Ocasionalmente, a visualização secundária ficará oculta novamente no IB. Você pode repetir os passos acima se tiver excluído o UITableView ou se o UITableView ainda estiver na hierarquia, basta clicar em UITableViewCell e a visualização aparecerá novamente.
O segundo método funciona para UIViews, mas não tão bem para UIToolbars e é impossível para UIButtons, então a solução mais limpa que encontrei quando você precisa incluir muitas subvisualizações diferentes é anexar um único UIView secundário ao seu controlador de visualização como um contêiner que nunca é mostrado, coloque todas as suas visualizações secundárias lá e use o truque UITableViewCell para tornar tudo visível. Eu redimensiono meu UITableView fictício para 0x0 para torná-lo invisível. Aqui está uma captura de tela de como tudo fica junto:
fonte
Se você está apenas procurando fazer seus controladores de visualização em outro lugar (e não em seu storyboard), há uma maneira bem simples de fazer isso:
1) Crie seus
CustomViewController
s (abcdController
no código que experimentei) com seusxib
s individuais como de costume.2) Adicione um
UIViewController
(ou qualquer outra superclasse suaCustomViewController
) ao storyboard.3) Defina CustomClass como em
CustomViewController
vez deUIViewController
conforme mostrado aqui:4) Finalmente, no seu
viewDidLoad
, carregue o customxib
e pronto.fonte
loadNibNamed
nesse caso ... XOAcho que você pode fazer algo assim para obter uma instância de viewcontroller específico do Storyboard e usar o view em cima dele.
Espero que isto ajude
Obrigado Vijay
fonte