2013-10-02 121 views
2

我想用相關的Nib(.xib)文件創建一個自定義UIView類來幫助佈局和創建。使用Nib(.xib)的自定義UIView的子視圖不加載?

現在,我的自定義視圖中沒有子視圖出現,即使它們存在於我的nib文件中,並通過IBOutlets正確連接到我的自定義視圖類。

我試圖通過以下其他答案去: Load custom UIView with XIB from a View Controller's view using IB

這一個: How do I get a view in Interface Builder to load a custom view in another nib?

這一個: http://soulwithmobiletechnology.blogspot.com/2011/06/create-uiview-with-nib-file-in-xcode-4.html

[[NSBundle mainBundle] loadNibNamed:@"MyView" owner:self options:nil]好像叫-[initWithCoder:],導致方法一個無限循環。

請讓我知道還有哪些其他細節可以幫助解決這個錯誤!

更新1:我是否需要通過-[layoutSubviews]佈置我的子視圖?我的筆尖文件是否真的沒有佈置出來?如果是這樣,那麼nib文件的重點是什麼?

+0

您是否正在嘗試在initWithCoder或awakeFromNib中加載nib? – HereTrix

回答

4

打開任何視圖控制器和將此代碼粘貼到您的viewDidAppear方法:

NSArray * allTheViewsInMyNIB = [[NSBundle mainBundle] loadNibNamed:@"MyView" owner:self options:nil]; // loading nib (might contain more than one view) 
MyCustomView* problemView = allTheViewsInMyNIB[0]; // getting desired view 
problemView.frame = CGRectMake(0,0,100,100); //setting the frame 
[self.view addSubview:problemView]; // showing it to user 

這就是你需要做的,提出一個觀點。如果您想與此視圖交互 - 您必須在類的界面中聲明MyCustomView* problemView,而不是在該方法中聲明。

+0

Hoorah,工作! –

+1

但是,那不破解封裝?不應該關心nib名稱的唯一實體是UIView本身嗎?根據:http://blog.bignerdranch.com/129-real-iphone-crap-2-initwithnibnamebundle-is-the-designated-initializer-of-uiviewcontroller/ –

+0

此外,爲什麼這需要在' - [ viewDidAppear:]'?爲什麼你不能在' - [viewDidLoad]'中實例化'只要你沒有做任何佈局? –

相關問題