2010-10-08 69 views
0

在我的iPhone應用程序中,我製作了一個自定義的UIView,用於在幾個不同的視圖控制器中顯示一些信息。加載自定義UIView的最佳方式是什麼?

我很熟悉在表中使用客戶表格單元格,但我從來沒有再做過自定義視圖。

我的問題是加載此視圖的最佳方式是什麼?我試圖簡單地將視圖放置在我希望它使用IB顯示的視圖控制器中,但這似乎不夠。在我看來,如果你爲視圖設置Class Identity,它應該在創建視圖控制器時加載該視圖。或者,也許它並不是因爲它不知道用什麼筆尖(當然它在自己的筆尖)。

由於它不是視圖控制器,我不能只使用initWithNibName。我試過使用NSBundle loadNibNamed,就像我對錶格單元格做的那樣,但它看起來像是一個非常大量的工作。代碼如下所示:

NSArray *topLevelObjects = [[NSBundle mainBundle] loadNibNamed:@"MyCustomView" owner:nil options:nil]; 
for (id currentObject in topLevelObjects) { 
    if ([currentObject isKindOfClass:[MyCustomView class]]) { 
     self.customView = currentObject; 
     break; 
    } 
} 
[self.view addSubview:self.customView]; 

必須有一個更簡單的方法,不涉及循環。此外,以這種方式創建視圖使我在IB實際放置視圖的位置上丟失了來自IB的所有信息。它創建於0,0,這不是我想要的地方。是的,我知道我可以設置一個新的框架,但是再次,必須有一個更簡單的方法。有沒有辦法通過IB來完成這一切?或者至少用編程方式減少工作量?

回答

1

我也是這樣做的。我碰到了我想要繼承UIView並使用筆尖的問題。我不認爲有更好的方法可以這樣做,因爲nib文件可以包含許多對象,您必須指定使用哪一個。但是,通過這種方式,您可以將IBOutlet放入MyCustomView中,並將其綁定到IB中,以便視圖可以自行管理,例如覆蓋layoutSubviews

+0

IB在這裏爲我做了些什麼?我必須從nib手動加載視圖,然後手動將框架設置爲正確的位置和大小,然後將其添加到父視圖。我已經使用一個UIView對象連接到IB,而這個UIView對象是我進入設計器的,但是這真的很有必要嗎? IB在這裏爲我做什麼? – Mike 2010-10-08 18:10:40

+0

IB爲您做所有的子視圖佈局,包括那些屬性設置和IBOutlet和IBAction綁定。你可以繼續找到更簡單的方法,我相信沒有。無論如何,你的代碼片段是好的,如果你使它成爲一種方法,你將更容易加載自定義的UIView。 – tia 2010-10-08 18:21:24

1

試試這個:創建一個新的UIViewController子類(爲了回答起見稱爲ParentViewController),那麼每個需要顯示此信息的控制器也將繼承子類。此控制器應該而不是有一個與它關聯的筆尖。

在ParentViewController中,爲UIView創建一個IBOutlet,該UIView將持有對包含您的自定義筆尖的視圖的引用。 (又稱爲customView,也是因爲)

現在,在界面生成器中打開您的筆尖(用於常用的customView)並選擇文件的所有者。現在在標識選項卡中,選擇上面爲該類創建的ParentViewController。現在來了這個訣竅。在Connections中,移除任何到「查看」(如果有的話)的連接,並創建一個從customView插座到定義您的customView的最高級UIView的連接。

現在,當您在ParentViewController的子類的代碼中執行loadNibNamed時,它應該自動從您的筆尖加載UIView,並將其引用到插口供您使用。不需要循環。

您還可以爲您的筆尖中的任何其他界面組件添加插座並執行相同的操作。

祝你好運!

+0

我試着按照你的指示,但我迷路了。這是我做的: – Mike 2010-10-08 17:58:16

+0

- 我創建了一個抽象的UIViewController「parentViewController」,並將其作爲視圖控制器的父類,而不是需要我的自定義視圖。 – Mike 2010-10-08 17:59:01

+0

- 現在當你說「打開你的筆尖」時,你的意思是哪個筆尖?新的parentViewController的筆尖,自定義視圖的筆尖,還是需要使用自定義視圖的每個視圖控制器的筆尖?我認爲你的意思是每個子視圖控制器的筆尖。 – Mike 2010-10-08 18:00:36

相關問題