2009-11-17 18 views
9

Cercherò di renderlo il più breve possibile.Nidificazione di classi personalizzate/XIB con Interface Builder

Ho scritto una classe personalizzata che estende UIView con un paio di proprietà di IBOutlet e ha un XIB associato con cui sono collegati questi IBOutlet.

Quindi voglio prendere quella classe, incorporarla in qualche altro XIB (ad esempio una cella di tabella), e farlo funzionare.

Sembra che quando incorporo quella classe personalizzata nel nuovo XIB, esso non riconosca l'originale XIB che ho associato con esso, quindi mi chiede di reimpostare gli IBOutlet per interfacciare gli elementi sul nuovo XIB. Questo è zoppo.

Qualcuno capisce cosa sto cercando di fare e di avere un buon approccio?

risposta

8

Ecco come sono riuscito a fare questo lavoro:

In Interface Builder
Aprite il vostro pennino esterno e fare questo:

  • Aggiungi un UIView per definire lo spazio in cui si desidera che il pennino interno da visualizzare.
  • Aggiungere un oggetto UIViewController dalla libreria, impostare la proprietà Nome pennino sul nome del file pennino interno (senza l'estensione).
  • Creare IBOutlets per questi due elementi nel controller della vista esterna e collegarli. (Mi riferisco a loro come InnerView e innerViewController.)
  • Non collegare nessuno dei IBOutlets definite nel controller della vista interiore per nulla nel file pennino esterno, basta lasciarli scollegati.

In Xcode
In viewDidLoad metodo vostra esterna del controller della vista, aggiungere queste due righe:

[self.innerView addSubview:self.innerViewController.view]; 
self.innerViewController.view.frame = CGRectMake(0, 0, self.innerView.frame.size.width, self.innerView.frame.size.height); 

Se il pennino esterno è un'UITableViewCell personalizzato, mettere quelle linee nel vostro awakeFromNib metodo invece.

Build & Esegui!

+0

Funziona allo stesso modo su OS X, basta sostituire le classi UI con le loro controparti NS. – Mark

1

Suppongo che tu stia semplicemente mettendo UIViews in un pennino per l'utilizzo da parte di un UIViewController che è puramente in codice. Apple lo chiama detached nib file.

Seguire la guida a cui mi sono collegato per i dettagli e l'esempio di come farlo funzionare.

Per incorporare una vista all'interno di un'altra in Interface Builder, è necessario add a UIView element from the Library nella visualizzazione padre e set its class in the Inspector. Una volta impostata la classe della vista incorporata, i tuoi IBOutlet dovrebbero essere visibili.

+1

Questa prima frase non è proprio quello che sto facendo. La classe stessa è un UIView e contiene UIImageView e UIActivityIndicator. Quest'ultima frase è giusta, ma sfortunatamente non si comporta correttamente. Attacca gli IBOutlet. –

Problemi correlati