2011-12-10 59 views
2

我想創建自己的UI庫,其中包含多個可重用控件。一個非常簡單的可能是一個LabeledView,它將包含一個UIView(最可能是一個UIImageView)和一個UILabel。iOS:從筆尖加載自定義UIView

---------------- 
| outer UIView | 
| ------------ | 
| |   | | 
| | UIView | | 
| |   | | 
| ------------ | 
| | UILabel | | 
| ------------ | 
---------------- 

如何在Interface Builder中實現此功能,並在創建外部UIView時「注入」內部UIView和UILabel?我有外部UIView作爲文件的所有者和內部UIView和UILabel與IBOutlets連接到我的LabeledView中的屬性。我現在想象的初始化函數,如:

[[LabeledView alloc] initWithView:(UIView *)theView andLabel:(UILabel *)theLabel] 

這種方法應該從筆尖其定義佈局加載視圖,插入theViewtheLabel進去。這不可能很難,不是嗎?我不明白這一點...

回答

1

如果你定義在筆尖的意見等,那麼你可以使用這裏描述loadNibNamed:在運行時添加他們:http://developer.apple.com/library/ios/documentation/uikit/reference/NSBundle_UIKitAdditions/Introduction/Introduction.html

這將返回一個數組,第一個對象將成爲筆尖中的頂級對象 - 上例中的容器視圖。

由於nib本身包含已經實例化的對象的序列化版本,所以在從nib中加載東西時,不要使用alloc/init。

+0

是的,我明白了。但是,在從該筆尖創建外部UIView之前,我有內部的UIView和UILabel,並且我想「注入」這些以便它們調整筆尖的佈局和大小。 – cschuff

+0

我認爲內部視圖和標籤是筆尖的一部分。你說過他們是連接到外部視圖的出口,這是文件的所有者,因此它們必須是筆尖的一部分。我不明白你在問什麼,你能給我更多的信息嗎? – jrturton

+0

我不想讓筆尖創建子視圖和標籤。我想使用之前創建的視圖和標籤。 nib中的視圖和標籤應該充當佔位符,我可以添加以前創建的視圖和標籤,以便它們從nib繼承佈局和屬性。我得出的結論是,這很可能根本不可能,我需要自己實現佈局... – cschuff

0

這可能會幫助你,創建獨立的UIView子類與他們自己的IBOutlet,和方法。此外,他們將獨立的`文件的所有者」,意味着你可以在你的代碼的任何地方使用它們。

按照以下步驟

  • 保留文件的所有者字段爲空。
  • 點擊在廈門國際銀行實際視圖您CustomView的文件,並設置它的自定義類用作CustomView(自定義視圖類的名稱)
  • IBOutlet中添加您的自定義視圖的.h文件中。
  • 在自定義視圖中的.xib文件,點擊查看和去在Connection Inspector。在這裏你將所有的IBOutle您在.h文件中定義的ts
  • 將它們連接到它們各自的視圖。

  • 在你CustomView類.m文件,重載init方法遵循

    - (CustomView *)初始化{ CustomView 結果=零; NSArray elements = [[NSBundle mainBundle] loadNibNamed:NSStringFromClass([self class])owner:self options:nil]; ([anObject isKindOfClass:[self class]]) { result = anObject; { 休息; } } 返回結果; }

  • 現在,當你想加載你的CustomView,使用下面的代碼行[[CustomView alloc] init];