2013-09-21 20 views
12

Brakuje mi czegoś ważnego. Nie do końca pewny, co to jest.iOS: Widok niestandardowy z Xib

Mam niestandardową podklasę widoku. Stworzyłem plik xib, aby zaprojektować jego układ. Połączyłem cztery guziki jako wyjścia do klasy.

#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; 

Mam następnie

#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; 
} 

Następnie dodać widok do innego widoku kontrolera poprzez: initWithFrame.

Kiedy próbuję zalogować się btn1, aby zobaczyć, czy istnieje, wypisze null. Zakładam, że to dlatego, że go nie zainicjowałem, ale nie jestem do końca pewien, jak to zrobić, biorąc pod uwagę, że jeśli utworzę go jako nowy przycisk, wszystkie rzeczy w Xib będą bezużyteczne?

Odpowiedz

13

Edited Response:

Oh wait, starasz się zainicjować pogląd w swojej klasie? Nie rób tego.

W programie Interface Builder ustaw Class of MCQview.xib na MCQView, aby automatycznie utworzyć połączenie. Połącz wszystkie przyciski, jeśli jeszcze tego nie zrobiłeś.

Następnie możesz edytować właściwości automatycznie, według własnego uznania.

enter image description here

Original Response

Robię to z pamięci, ale myślę, że powinno to być zrobione tak:

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

ja nie bardzo rozumiem. W jaki sposób następnie utworzyć instancję tego widoku z innego kontrolera widoku? Z niestandardowym XIB. – JoshDG

+0

Aby utworzyć instancję widoku w innym kontroler widoku, użyj kodu pod nagłówkiem ** Original Response **. – ArtSabintsev

+0

Ah, to działa. Jak uruchomić inicjowanie niestandardowego widoku? – JoshDG

0

Masz rację, że nie musisz inicjować przycisków za pomocą XIB. Spróbuj użyć initWithNibName zamiast loadNibNamed.

+1

UIView nie reaguje na initWithNibName: – ArtSabintsev

+0

Tak myślę ów na widok kontrolerów – JoshDG

4

ta powinna być prosta:

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

Dla Swift (2):

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