2013-09-21 188 views
12

我錯過了一些重要的東西。不完全確定它是什麼。iOS:用xib自定義視圖

我有一個自定義視圖子類。我創建了一個xib文件來設計它的佈局。我連接了四個按鈕作爲課程的出路。

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

我然後有

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

我然後經由視圖添加到另一個視圖控制器:initWithFrame

當我嘗試記錄btn1,看它是否存在,它打印空。我認爲它是因爲我沒有初始化它,但我不確定如何做到這一點,考慮到如果我將它創建爲新按鈕,那麼xib中的所有東西都將是無用的?

回答

13

修改後的迴應:

哦,等一下,你要初始化類中的觀點?不要這樣做。

在Interface Builder中,將MCQview.xib的類設置爲MCQView以自動創建連接。如果你還沒有連接所有的按鈕。

之後,您可以根據需要自動編輯屬性。

enter image description here

原始響應

我從內存中這樣做,但我認爲你應該做這樣的:

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

我不太明白。那麼如何從另一個視圖控制器實例化該視圖?用定製的xib。 – JoshDG

+0

要在另一個視圖控制器中實例化視圖,請使用**原始響應**標題下的代碼。 – ArtSabintsev

+0

啊,這是有效的。我如何去初始化自定義視圖? – JoshDG

0

你是對的,你不需要用XIB初始化按鈕。嘗試使用initWithNibName而不是loadNibNamed。

+1

的UIView並不initWithNibName迴應: – ArtSabintsev

+0

是啊,我認爲是對的視圖控制器 – JoshDG

4

這應該是簡單的:

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

對於Swift(2):

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