2013-02-28 73 views
0

我想創建一個自定義的UIView並將其加載到xib文件中。自定義的UIView被稱爲JtView這裏是代碼:自定義UIView和loadNibNamed不工作

- (id)initWithFrame:(CGRect)frame 
{ 
    self = [super initWithFrame:frame]; 
    NSLog(@"initWithFrame was called"); // this was called 
    if (self) { 
     // Initialization code 
     [[NSBundle mainBundle] loadNibNamed:@"MyView" owner:self options:NULL]; 
     [self addSubview:self.view]; 
    } 
    return self; 
} 

-(void)awakeFromNib 
{ 
    [super awakeFromNib]; 
    [self addSubview:self.view]; 
} 

在創建廈門國際銀行文件(文件 - >新建 - >文件 - >用戶界面 - >查看),我刪除了主窗口,並拖了從Xcode的對象調色板查看。我試着拖動到JtView的頭部,但這不起作用。我需要在這裏創建一個關聯,還是應該離開XCode創建的地方? (編輯 - 請參閱下面的評論以作進一步說明)

我還在xib中添加了UILabel。

但是,當我在模擬器中運行並將背景顏色設置爲紅色時,標籤不顯示。我是否需要在自定義UIView中創建UILabel作爲參考?我應該刪除這個還是放置它? enter image description here

THX

編輯1 這裏是連接的屏幕截圖,頭文件:

+0

請CH eck文件的視圖在nib文件中的所有者。你必須提到JtView代替文件所有者的觀點在筆尖 – 2013-02-28 18:21:05

+0

所以是的,我已經調整,並沒有刪除主'窗口'。我已將文件的所有者連接到View,但標籤仍未顯示。 – timpone 2013-02-28 18:37:33

+0

好的。如果你還沒有解決你的問題,請參考http://stackoverflow.com/questions/15144482/custom-uiview-iboutlet-not-set/15154855#15154855這可能會有所幫助。如有任何問題,請回復我。謝謝 – 2013-03-01 09:55:49

回答

-1

試試這個:

-(void)awakeFromNib { 
    NSArray *obj = [[NSBundle mainBundle] loadNibNamed:@"MyView" owner:self options:nil]; 
    [self addSubview:obj[0]]; 
} 

或者,如果你有一個@property IBOutlet中名爲「 nibview「你可以這樣做:

-(void)awakeFromNib { 
    [[NSBundle mainBundle] loadNibNamed:@"MyView" owner:self options:nil]; 
    [self addSubview:self.nibview]; 
} 
+0

這段代碼給了我一個崩潰,說'EXC_BAD_ACCESS(code = 2)'! – 2014-07-07 07:28:02

+0

你試過了哪個版本? – jsd 2014-07-07 17:11:22

+0

XCode - 5.1(B) iOS - 7.1 – 2014-07-08 04:18:49

1

我解決它添加一個類的方法來UIView的:


+ (id)customView; 

+ (id)customView 
{ 
    CustomView *customView = [[[NSBundle mainBundle] loadNibNamed:@"CustomView" owner:nil options:nil] lastObject]; 

    // make sure customView is not nil or the wrong class! 
    if ([customView isKindOfClass:[CustomView class]]) 
     return customView; 
    else 
     return nil; 
} 

- (void)viewDidLoad 
{ 
    [super viewDidLoad]; 

    CustomView *customView = [CustomView customView]; 
    //And where you gonna use it add this line: 
    //this self.view refers to any view (scrollView, cellView...) 
    [self.view addSubview:customView]; 
} 

我希望it's要去幫助