2012-12-21 20 views
17

Sono nuovo allo storyboard. Ho usato per rendere la mia vista utilizzando il codice. Ho una domanda.StoryBoard gestione ereditaria controller vista

ho creato un controller di vista

@interface FunctionViewController : UIViewController 

E devo utilizzare il mio codice per aggiungere

  1. un pulsante a schermo intero (alpha: 0,5)
  2. una vista popup simile nel mezzo (non a schermo intero)

Quindi ho creato un altro Viewcontroller

@interface PlayFunctionViewController : FunctionViewController 

e aggiungere un po 'di vista sul popup simile vista

voglio ricreare queste cose utilizzando storyboard.

Come posso creare questi utilizzando il generatore di interfacce e lo storyboard in modo che Non sia necessario impaginare il pulsante a schermo intero e la visualizzazione a comparsa in ogni sottoclasse di FunctionViewController?

+0

È il numero di risposta che hai accettato ... –

+0

Se stai eseguendo il layout nel generatore di interfacce, dovrai eseguire il layout di ogni singolo controller di visualizzazione completamente, poiché devi collegare l'IBOutlet a ciascuno di essi.Se vuoi avere elementi che appariranno nel controller della vista e in tutte le sue sottoclassi, crearli a livello di codice nel metodo 'viewDidLoad'. – Greg

+0

PartiallyFinite - non esattamente, può usare Tag - '[auto viewWithTag: 100]' – Quver

risposta

7

Non è possibile ereditare il layout di una superclasse in una sottoclasse in uno storyboard, vale a dire se si visualizzano elementi in un controller di visualizzazione in uno storyboard e li si collega al codice, sottoclassi di tale controller di visualizzazione e anche altri istanze della stessa classe, dovranno essere disposte individualmente e non verranno popolate o aggiornate automaticamente.

In altre parole, in uno storyboard, è necessario disporre manualmente e connettere tutti gli elementi dell'interfaccia in ogni singola istanza e sottoclasse aggiunte allo storyboard. Ciò ti dà la flessibilità di poter riutilizzare più istanze della stessa classe in tutta la tua app e disporle in modo diverso, ma non ti dà la possibilità di ereditare i layout.

Se si desidera ereditare il proprio layout in sottoclassi, eseguire il layout a livello di programmazione nella viewDidLoad della superclasse, quindi tutte le sottoclassi avranno quegli elementi di interfaccia, anche se si progettano e li si dispongono nello storyboard (essi non saranno visibili nello storyboard, ma appariranno quando costruisci ed esegui la tua app).


In sostanza, se si vuole avere elementi di interfaccia che sono gli stessi in una classe e di tutte le sue sottoclassi, crearli di programmazione, e saranno presenti in tutti i casi e le istanze delle sottoclassi, anche se si crea e progettare il istanze stesse nello storyboard.

È possibile combinare codice e storyboard, in modo da poter creare alcuni elementi nello storyboard, ma altri che devono essere presenti in tutte le istanze e sottoclassi, nel codice.

+0

Questo può essere fatto tramite pennini in qualche modo? Ho impostato le mie viste utilizzando l'autolayout con tutti i vincoli. Sarebbe bello ereditarlo in tutte le sottoclassi. – guptron

+0

@sguptaet Sfortunatamente no. Mi sono imbattuto in questo me stesso un certo numero di volte e ho finito per copiare e incollare il controller della vista o aggiungere i bit in più nel codice. – Greg

+0

Non sono d'accordo, se si avvia il controller di visualizzazione dal file pennino, potrebbe essere ereditato, compresi i vincoli di autolayout. Ho realizzato il prototipo su iOS 7 e 8. – Wingzero

0

Mi sono imbattuto in un problema simile e, sebbene richiedesse molto tempo, ma creare un delegato e riutilizzarlo in più controller di visualizzazione era una soluzione molto migliore. Anche se questo batte il punto intero di 'Eredità'.

Problemi correlati