2012-12-27 18 views
10

Ho un viewController "contenitore", che contiene alcune visualizzazioni di contenitore tramite storyboard. ciascuna di queste viste del contenitore ha un collegamento a una vista incorporata del viewcontroller.Caricamento di un UiviewController xib a ContainerView nello storyboard

Dal momento che sto lavorando su un grande progetto, risulta che il file dello storyboard è enorme e contiene molti "bambini" per visualizzare il layout dei videoregistratori. sarà un problema lavorare su quel file quando alcune persone hanno bisogno di lavorare contemporaneamente su di esso. e questo non va bene per me. mi piacerebbe sapere se c'è un modo per caricare in ogni contenitore visualizzare il file xib di un viewcontroller e continuare ad usare lo storyboard.

Significato, creazione di file .xib per ciascun viewcontroller invece di tenerli nello storyboard stesso e collegarli alle viste contenitore nello storyboard.

grazie,

risposta

5

Sì, è possibile. Un paio di osservazioni:

  1. Tutto quello che dovete fare è di mettere in una sorta di codice che abbiamo usato per usare quando si utilizza ONA. Nel caso di container, significa the typical container methods. Se non si è effettuato il contenimento tramite codice, vedere Creating Custom Container View Controllers nella Guida alla programmazione del controller View View . In conclusione, mentre si passa a una scena non storyboard (o si aggiunge un controller di visualizzazione figlio non storyboard), basta codificarlo come si è sempre abituati nell'ambiente basato su NIB. Non è possibile rappresentare questa scena basata su NIB nello storyboard. Ma basta avere il controller come fai sempre con ONA:

    SecondViewController *controller = [[SecondViewController alloc] initWithNibName:nil bundle:nil]; 
    
  2. È, ovviamente, perdere molti dei vantaggi di utilizzare storyboard (ad esempio il dimensionamento la scena del bambino sulla base della vista container nella scena madre), ma tu non stai peggio di quanto fossi in un ambiente NIB. Ma in risposta alla tua domanda se puoi "collegarli alle viste del contenitore nello storyboard", non puoi rappresentare questa relazione nello storyboard stesso, ma piuttosto collegarli a livello di codice.

  3. Se i team separati lavorano in ambienti a scena singola, è possibile utilizzare questo approccio NIB. Dovresti anche contemplare, però, solo più storyboard, uno per ogni team logico. Dovrai comunque ricorrere al codice mentre passi da uno storyboard all'altro, proprio come fai con questo approccio NIB, ma se uno dei tuoi team ha più scene da affrontare, possono godere dei vantaggi dello storyboard all'interno della loro porzione del progetto. Quando si vuole arrivare alla prima scena nel prossimo storyboard, è possibile:

    UIStoryboard *secondaryStoryboard = [UIStoryboard storyboardWithName:@"SecondStoryboard" bundle:nil]; 
    SecondViewController *controller = [secondaryStoryboard instantiateInitialViewController]; 
    
  4. Se il vostro bambino ha bisogno di transizione verso una nuova scena sul vostro storyboard, lo trovo utile aggiungere la mia parentStoryboard proprietà controller figlio, che può quindi essere utile se è necessario fare qualcosa come instantiateViewControllerWithIdentifier. Ovviamente, se non stai passando ai nuovi controller, potresti non aver bisogno di farlo, ma se lo sei, avere una proprietà UIStoryboard può essere utile.

+0

Grazie Rob, ho lavorato in precedenza con il contenimento, e ho provato ad usarlo in questo progetto - funziona bene, ma mi stavo chiedendo se c'è un modo per "godersi entrambi i mondi", ma sembra impossibile. storyboard rende automaticamente i miei childViewControllers come bambini che è fantastico. comunque, quello che hai scritto in 3,4 è molto interessante e lo ammetto. – Lirik

+0

@LironK Sì, ho ottenuto ciò che volevi fare, ma se hai più storyboard (e/o NIB), perdi alcuni dei benefici dello storyboard. Semplicemente non penso che tu possa avere storie tra storyboard o tra storyboard e NIB. Dovrai farlo nel codice, temo. Scusate. – Rob

12

È possibile spostare il layout controller di vista in una XI ter separata. Come dici tu, questo è un modo molto conveniente per condividere i layout attraverso gli storyboard.

Quando si imposta una vista Contenitore nello storyboard, assicurarsi di eliminare la vista fornita nel ViewController incorporato.Impostare la classe personalizzata per ViewController sul nome della classe. Assegna un nome allo xib in modo che corrisponda alla classe (ad es. FooViewController.xib in modo che possa essere trovato quando FooViewController.m è caricato.)

Se non si elimina la vista nel layout del controller della vista dello storyboard, vedrete che vuoto guarda invece. Il tuo metodo viewDidLoad nel tuo controller di visualizzazione non verrà chiamato, perché View è la visualizzazione predefinita dello Storyboard.

Sto utilizzando Xcode 6.1 per iOS 8 su un progetto pre-iOS 7.

+0

Grazie! Tu salvi la mia giornata! – Cleversou

+1

Questa dovrebbe essere la risposta corretta. Un approccio solo storyboard per incorporare un controller di visualizzazione figlio da un NIB. Perfezionare. Grazie. –

Problemi correlati