2012-03-03 268 views
1

我一直在爲此苦苦掙扎了一段時間,我認爲解決方案非常簡單,但我無法做到正確。我有一個UIViewController,它有它的視圖,現在我想添加一個子視圖到它。子視圖應該從一個筆尖加載。我遵循的步驟描述here,即:
1.創建MyView類,這是UIView的
2的子類MyView
3.進行的.xib文件,其中文件所有者設置爲UIViewController中聲明IBOutlet中的屬性和視圖類設置爲MyView
4.連接網點
5.在MyViewControllerviewDidLoad方法:從筆尖加載視圖

NSArray *nibViews = [[NSBundle mainBundle] loadNibNamed:@"MyView" owner:self options:nil]; 
MyView *mView; 
for (id view in nibViews) { 
    if ([view isKindOfClass:[MyView class]]) { 
     mView = (MyView*) view; 
    } 
} 
[self.view addSubview:mView]; 

MView的加載成功,但是當我嘗試添加它作爲子視圖,我得到EXC_BAD_ACCESS。我甚至補充說:mView = [(MyView*) view retain];但這並沒有幫助。

我在做什麼錯?

回答

1

我不知道你的觀點3:

做的.xib文件,其中文件的所有者設置的UIViewController和View類設置爲MyView的

的文件所有者不應該是uiviewcontroller,但MyView類

+0

你說得對 - 我是按照被引用的SO回答中的步驟操作的。不敢相信我沒有早點認識到它。感謝名單 – Maggie 2012-03-03 12:41:29

2

不要擔心......

你並不需要採取單獨的榫文件並再次引用到MyView的類。只需將UIView從庫中拖到當前的viewController的xib中,然後就可以將視圖從當前視圖連接到xib。

見下面的圖片:enter image description here

+0

現在你可以創建。h as:IBOutlet UIView * myView;然後在你想要的時候添加它。任何疑問,請告訴我。 – 2012-03-03 12:27:29

+0

dis是最簡單的方法 – 2012-03-03 13:04:16

1

在我的情況下,我不希望我的視圖控制器從我的視圖的.xib知道IBOutlets。我希望我的視圖子類擁有IBOutlets。不幸的是,UIView沒有initWithNibName:方法,所以我只創建了自己的類別。

這裏就是我所做的:

  • 在IB,點擊你的主要的UIView,並在Identity Inspector中,將類的子類
  • 在IB,點擊文件擁有者,並在Identity Inspector,將類設置爲您的子類
  • 使用您的新類別方法initWithNibName:來實例化您的視圖。

這裏是我創建的類別:

- (instancetype)initWithNibName:(NSString *)nibName 
{ 
    NSArray *arrayOfViews = [[NSBundle mainBundle] loadNibNamed:nibName owner:self options:nil]; 
    if (arrayOfViews.count < 1) { 
     return nil; 
    } 

    self = arrayOfViews[0]; 

    return self; 
} 

通過this post啓發。

注意,雖然到目前爲止框架會自動調整,所以與帖子中的代碼不同,我還沒有明確地設置框架。 另外,與帖子的代碼不同,我需要設置owner:self,這樣IBOutlets才能正確連線。