2013-09-21 25 views
12

Mi manca qualcosa di importante. Non sono esattamente sicuro di cosa sia.iOS: visualizzazione personalizzata con xib

Ho una sottoclasse di visualizzazione personalizzata. Ho creato un file xib per progettare il suo layout. Ho collegato quattro pulsanti come punti vendita alla classe.

#import <UIKit/UIKit.h> 

@interface MCQView : UIView 
@property (strong, nonatomic) IBOutlet UIButton *btn1; 
@property (strong, nonatomic) IBOutlet UIButton *btn2; 
@property (strong, nonatomic) IBOutlet UIButton *btn3; 
@property (strong, nonatomic) IBOutlet UIButton *btn4; 

Poi ho

#import "MCQView.h" 

@implementation MCQView 
@synthesize btn1,btn2,btn3,btn4; 

- (id)initWithFrame:(CGRect)frame 
{ 
    self = [super initWithFrame:frame]; 
    if (self) { 
     [self addSubview:[[[NSBundle mainBundle] loadNibNamed:@"MCQView" owner:self options:nil] objectAtIndex:0]]; 
      NSLog(@"%@", btn1); 

    return self; 
} 

Ho poi aggiungere la vista ad un altro controller della vista tramite: initWithFrame.

Quando provo a registrare btn1, per vedere se esiste, stampa nulla. Presumo che sia perché non l'ho inizializzato, ma non sono esattamente sicuro di come farlo, considerando che se lo creo come un nuovo pulsante, allora tutte le cose nello xib saranno inutili?

risposta

13

A cura di risposta:

Oh aspetta, si sta cercando di inizializzare la vista all'interno della vostra classe? Non farlo.

In Interface Builder, impostare la classe di MCQview.xib in MCQView per creare automaticamente la connessione. Collega tutti i tuoi pulsanti, se non lo hai già fatto.

Successivamente, sarete in grado di modificare automaticamente le proprietà come meglio credete.

enter image description here

risposta originale

sto facendo questo a memoria, ma penso che dovrebbe essere fatto in questo modo:

NSArray *nib = [[NSBundle mainBundle] loadNibNamed:@"MCQView" owner:self options:nil]; 

UIView *view = [[UIView alloc] init]; // or if it exists, MCQView *view = [[MCQView alloc] init]; 

view = (UIView *)[nib objectAtIndex:0]; // or if it exists, (MCQView *)[nib objectAtIndex:0]; 

[self.view addSubview:view]; 
+0

io non capisco. Come quindi creare un'istanza di quella vista da un altro controller della vista? Con lo xib personalizzato. – JoshDG

+0

Per creare un'istanza della vista in un altro controller della vista, utilizzare il codice sotto l'intestazione ** Risposta originale **. – ArtSabintsev

+0

Ah, questo funziona. Come faccio a inizializzare la visualizzazione personalizzata? – JoshDG

0

Hai ragione che non è necessario avviare i pulsanti con XIB. Prova a utilizzare initWithNibName anziché loadNibNamed.

+1

UIView non risponde al initWithnibName: – ArtSabintsev

+0

Sì credo che sia così per view controller – JoshDG

4

Questo dovrebbe essere semplice:

view = [[[NSBundle mainBundle] loadNibNamed:@"MCQView" owner:self options:nil] objectAtIndex:0]
1

Per Swift (2):

var nib = NSBundle.mainBundle().loadNibNamed("MCQView", owner: self, options: nil) 
    view : MCQView = nib[0] as! MCQView 
    self.view.addSubview(view) 
Problemi correlati