Decomposizione un'interfaccia utente iPhone - viste multiple in un unico XI ter?
-
19-09-2019 - |
Domanda
Ho una vista principale con un controllore associato. Ho alcune barre degli strumenti piuttosto complicata che ho bisogno di cambiare e uscire a seconda interazione con l'utente.
Per mantenere le cose semplici gestisco le barre degli strumenti con il mio controller della vista principale, piuttosto che avere tutti i tipi di dipendenze o catene intrecciate delegati davvero profondi.
In ogni caso, come posso avere più viste in uno XI ter e li correttamente inizializzata? Come se voglio visualizzare uno dei miei visualizzazioni personalizzate nel centro dello schermo, come avrei dovuto farlo?
In alternativa, se mi separo i punti di vista in più xibs, come posso averli riferimento allo stesso oggetto controller per i loro IBOutlets / IBActions?
Soluzione
In ogni caso, come posso avere più viste in uno XI ter e inizializzare propriamente? Come se voglio visualizzare uno dei miei visualizzazioni personalizzate nel centro dello schermo, come potrei farlo?
Si possono avere molti UIView
s come si desidera nella vostra XI ter. Di solito ti fanno uno la vista "primario" - quello che è collegato alla proprietà vista del proprietario del file (vale a dire il vostro controller della vista) - e il resto può sedere nel XI ter allo stesso livello. È possibile collegare ad altre proprietà nel controllore vista pure.
Si potrebbe fare questi punti di vista come subviews per la visualizzazione principale. (Pochi, che è un sacco di vista). Diciamo che avere due viste, FooView
e BarView
. Si vuole FooView
ad assistere all'avvio. Quindi, è sufficiente impostare BarView
per essere nascosto in IB. Allora il tuo controller della vista potrebbe essere simile a questo:
@interface MyViewController : UIViewController
{
FooView* fooView;
BarView* barView;
...
}
...
@property (nonatomic, retain) IBOutlet FooView* fooView;
@property (nonatomic, retain) IBOutlet BarView* barView;
...
Poi, all'interno del codice, quando si desidera cambiare visualizzazione, basta utilizzare il metodo setHidden:
per nascondere uno e mostrare l'altro.
In alternativa, se mi separo i punti di vista in più xibs, come posso avere li riferimento alla stessa controllore oggetto per le loro IBOutlets / IBActions?
Si possono avere altri xibs che condividono lo stesso controller della vista. Ho fatto un sacco di me. Basta impostare il file proprietario nella classe appropriata.
Altri suggerimenti
In realtà è molto semplice. Basta creare una nuova visione a livello principale nel file XIB e creare un IBOutlet
per questa vista nel vostro controller della vista principale.
Per quanto riguarda la vista di carico direttamente dal XIB di, che condividono lo stesso controller della vista, che è un po 'più sciatta .. avresti essenzialmente bisogno di ciclo tra gli elementi del file XIB e trovare l'elemento che stai cercando.
Una cosa da notare da questo approccio è che tutti i punti di vista ottenere inizializzato quando sono necessari una qualsiasi delle viste.
Se le vostre opinioni sono semplici questo potrebbe non importa, ma se si ha una vista complesse, questo potrebbe rendere l'applicazione lento a caricare.
Se la vista è piuttosto complesso, si dovrebbe dividerli in diversi file .xib
. In questo caso la UIViewController
genitore avrebbe IBOutlets alle altre sottoclassi UIViewController
piuttosto che IBOutlets a UIViews
. I controller di vista gestirà automaticamente il lazy-caricamento dei rispettivi vista.