Interface Builder. Come posso sostituire i controller di visualizzazione programmatica con IB ViewController?

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

Domanda

Mentre mi sposto sempre più della mia costruzione dell'interfaccia utente da XCode a IB, c'è un ostacolo rimanente che devo eliminare.

Attualmente, creo i miei viewController personalizzati in XCode con inizializzatori personalizzati. In genere hanno un gruppo di ivar che vengono impostati durante l'inizializzazione tramite parametri passati. Mi piacerebbe davvero spostare il più possibile su IB.

Qualcuno potrebbe spiegarmi attentamente - o, meglio, indicarmi il codice - come replicare l'approccio XCode di passare i parametri tramite l'inizializzatore personalizzato in IB - presumibilmente tramite IBOutlet.

Grazie in anticipo.

Saluti, Doug

UPDATE:

Un tipico scenario è che il mio AppDelegate uscirà in rete, prenderà alcuni dati - NSMutableData e quindi passerà un riferimento a un root viewController - in genere un TableViewController - che viene inserito nello stack viewController di un navigationController.

Quando viene selezionata una cella, viene allocato / inizializzato un secondo ViewController e gli viene passato un sottoinsieme di dati. Il secondo ViewController va in rete per un po 'più di dati, crea una gerarchia di viste, passa i bit dei dati recuperati a ogni sottoview e quindi ogni sottoview viene messaggiata con setNeedsDisplay per elaborare i dati.

È possibile passare questi dati gerarchici che voglio trasferire a IB.

È stato utile?

Soluzione

Puoi comunque avere un inizializzatore personalizzato. Tuttavia, all'interno di questo inizializzato chiamerai - [initWithNibName: @ " yourNibName " Bundle: fascio] . Collegherai le tue variabili di codice relative a UIKit ( UILabel , UIButton , ecc.) Nel builder Interface e quindi non dovrai istanziare quegli oggetti nel tuo inizializzatore. Altre variabili di istanza (stringhe, dizionari, oggetti personalizzati, ecc.) Creerai un'istanza e imposterai nel tuo inizializzatore.

Inoltre, tieni presente che la manipolazione delle variabili relative a UIKit come l'impostazione del testo dell'etichetta o l'impostazione della posizione di un UIView , deve essere effettuata nel viewDidLoad poiché questi oggetti potrebbero non essere stati completamente creati durante l'esecuzione dell'inizializzatore.

Fammi sapere se hai bisogno di maggiori informazioni.

Altri suggerimenti

Diciamo che abbiamo MyViewController che estende UIViewController e MyViewControllerParameter che è uno dei nostri oggetti personalizzati che passiamo in MyViewController all'inizializzazione. MyViewController ha un IBOutlet di tipo MyViewControllerParameter definito in esso. Vogliamo mettere MyViewController in un'altra vista contenente, ParentView.xib. ParentView.xib è di proprietà di ParentViewController.m e creato altrove. Facciamo doppio clic su ParentView.xib in XCode per avviare Interface Builder. Trasciniamo quindi un " oggetto " dalla vista Libreria (credo che tu apra la vista biblioteca con Cmd + Maiusc + L se non è aperto per impostazione predefinita) nella finestra del documento. (Questa è la finestra attivata da Cmd + 0.)

Un oggetto " Oggetto " è un widget arbitrario trovato nella libreria (identificato da un'icona cubo d'oro massiccio) che può rappresentare qualsiasi cosa nel tuo progetto. Dopo aver posizionato il nuovo oggetto nella finestra del documento, digitiamo Cmd + 4 per aprire la finestra di ispezione di Indentity. Nel campo di testo in alto possiamo digitare il nome del nostro parametro del controller di visualizzazione, "MyViewControllerParameter". Successivamente troviamo il widget ViewController nella libreria e rilascialo nella finestra del documento. Apriamo la finestra di ispezione Attributo (Cmd + 1) e impostiamo il nome del pennino su " MyView.xib " ;. Ciò dovrebbe far sì che CocoaTouch carichi MyViewController usando le definizioni in " MyView.xib " ;.

Apri la finestra di ispezione identità e imposta l'attributo class su MyViewController. Ultimo clic destro o control clic (o tocco con due dita se abbiamo configurato correttamente il trackpad sul nostro MacbookPro) MyViewController nella finestra del documento. Si aprirà una finestra che mostra tutti gli IBOutlet in MyViewController. Trascina una linea dal piccolo cerchio aperto accanto alla presa MyViewControllerParameter e rilasciala sull'oggetto MyViewControllerParameter che si trova nella finestra del documento. Il collegamento di questi punti è il modo in cui si impostano i parametri tra gli oggetti utilizzando l'interfaccia builder.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top