2009-09-19 79 views
11

我有一個2屏幕(MainViewController和AboutViewController)的應用程序。當用戶點擊一個按鈕時,我想加載在另一個XIB中定義的AboutViewController屏幕。如何加載XIB?

似乎很簡單,但我今天似乎無法找到我的google-fu。我該如何解決這個問題?

回答

30

當你調用[AboutViewController init],它的預期調用某種形式的[super init],這是[UIViewController init]的代名詞。發生這種情況時,視圖控制器會自動尋找名爲(在你的情況下)AboutViewController.xib的nib文件。如果它找到該文件,它會將它的內容加載到您的視圖控制器中。因此,基本上,您只需要初始化視圖控制器,並確保其與關聯的nib文件具有相同的名稱。

如果您想在您的視圖控制器中加載具有不同名稱的筆尖文件,您可以明確地調用initWithNibName:bundle:,並選擇您喜歡的任何一個nib文件的名稱。

如果標準init(具有相同名稱的nib文件)不適合您,那麼您可以檢查幾件事情。

  • 類名的拼寫相同
  • 筆尖文件包含在項目中的筆尖文件的拼寫(和案件),而不是僅僅坐在同一目錄
  • UIViewController子類的init方法並還呼籲[super init]
  • 您所呼叫的UIViewController子類的init方法
  • 你確實使您的視圖控制器的視圖中可見
+4

我不知道XIBs是自動加載喜歡這個。謝謝! – DOOManiac 2011-08-09 04:01:12

0

一個NSBundle loadNibNamed:

11

With a About屏幕,您可能只想顯示一個視圖然後關閉它。因此,而不是使用全新的視圖控制器,您可以覆蓋當前的視圖。

假設你有伊娃

UIView *aboutUsView; 

與相應的屬性。

在您的視圖控制器做:

[[NSBundle mainBundle] loadNibNamed:@"AboutUsView" owner:self options:nil]; // Retains top level items 
[self.view addSubview:aboutUsView]; // Retains the view 
[aboutUsView release]; 

要刪除的觀點,說在連接到該視圖一個按鈕的操作,這樣做:

[aboutUsView removeFromSuperview], aboutUsView = nil; // Releases the view 
+0

他特別說他有兩個視圖控制器,「MainViewController和AboutViewController」不是視圖控制器和視圖。 – mahboudz 2009-09-21 03:26:47

+5

正確。我特別說過,他可能不需要他們兩人來達到他所說的目標。 – 2009-09-24 03:56:23

+0

這似乎是明顯的方法。 – user1432813 2012-07-19 14:43:41