Collega UIView in XIB e caricalo utilizzando View Controller nella Storyboard

Ho un XYZViewController (semplice UIViewController nello storyboard) che viene caricato con la visualizzazione predefinita. Ho un tipo XYZView per il quale ho UIView in un file .xib .

Nella class XYZViewController, ho definito la properties; per XYZView come IBOutlet . Ciò che è complicato è che non so come colbind questa properties; a UIViewController nello storyboard (o UIVIew nel file .xib) in modo tale che –

  • l'IBOutlet è connesso alla vista UIV giusta
  • la vista nello xib diventa una sottoview aggiunta per la vista predefinita di UIViewController.

(Io sotto la domanda sembra azzardato e / o forse non ho il modo giusto di spiegarlo, ma è il meglio che potrei.)

EDIT: ulteriori chiarimenti possono rendere più facile. Semplicemente non voglio dire a me stesso:

 XYZView *xyzView = [[XYZView alloc] initWithFrame...]; 

o

 [self.view addSubview:xyzView]; 

Forse questo aiuta.

Solutions Collecting From Web of "Collega UIView in XIB e caricalo utilizzando View Controller nella Storyboard"

OK, da quello che ti dico hai il seguente …

XYZViewController Il codice di questo è nei file XYZViewController.h and .m .

Un file .storyboard Nel file storyboard hai un controller di visualizzazione che hai impostato la sottoclass su XYZViewController .

Un file .xib Nel file xib hai una singola vista che hai definito come sottoclass XYZView .

Destra?

Immagino che quello che hai fatto sia il seguente …

Nel file .xib hai disposto XYZView e metti etichette, pulsanti, ecc … su di esso.

Il controller della vista viene creato dallo storyboard. Ma ora vuoi attaccare etichette e pulsanti.

Destra?

Se tutto questo è corretto, hai un paio di opzioni.

L'opzione più semplice

Rilascia il file xib A less che XYZView sia utilizzato in più punti dell'app (cioè all'interno di diversi controller di vista), allora dovresti davvero fare tutto questo nello storyboard. Aggiungi i pulsanti e le etichette a XYZViewController nello storyboard.

Ciò consentirà quindi di connettere IBOutlet e IBActions e functionrà tutto semplicemente perché lo storyboard sta creando e quindi impostando i punti vendita e le azioni.

Opzione successiva

Poiché hai creato la vista in un file xib devi caricarla da quel file xib nel codice e quindi aggiungerla al tuo controller di visualizzazione.

Qualcosa di simile a…

 - (void)viewDidLoad { [super viewDidLoad]; self.xyzView = [[[NSBundle mainBundle] loadNibNamed:@"XYZView" owner:self options:nil] objectAtIndex:0]; [self.view addSubview:xyzView]; } 

Quindi puoi fare cose come …

 self.xyzView.someLabel.text = @"This is the text"; 

Non è ancora ansible connettere prese e azioni, ma ciò accade perché il controller di visualizzazione non viene creato dallo xib. Viene creato dallo storyboard.

Questo può diventare tutto disordinato però. Consiglio davvero di creare una vista in uno xib separato se si tratta di qualcosa che si riutilizza più volte (come una valutazione di 5 stelle o qualcosa del genere).

Cosa non puoi assolutamente fare

OK, penso che potrei aver pensato a quello che stai facendo.

Nello storyboard hai impostato la sottoclass della vista come XYZView e ti aspetti che XYZView le etichette e i pulsanti ecc … che hai definito nel file XYZView per XYZView .

Questo assolutamente non functionrà, mai.

Lo storyboard e lo xib sono oggetti completamente separati. Se si desidera utilizzarli insieme, il codice è coinvolto nel caricare una vista da un pennino e quindi aggiungerla a un controller di visualizzazione creato in uno storyboard.