2011-04-23 74 views
4

爲什麼在didFinishLaunchingWithOptions方法中需要以下行?爲什麼在Xcode 4 Navigation Based App中需要「window.rootViewController = self.navigationController」?

self.window.rootViewController = self.navigationController; 

也就是說,關注的是已經出現在Interface Builder中,在主窗口廈門國際銀行,它的導航控制器的導航欄和RootViewController的範圍內它的層次結構。參考整個方法的

Copy是:

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions 
{ 
    // Override point for customization after application launch. 
    // Add the navigation controller's view to the window and display. 
    self.window.rootViewController = self.navigationController; 
    [self.window makeKeyAndVisible]; 
    return YES; 
} 
+0

如果您在IB中使用MainWindow.xib創建正確的附件,則可以安全地刪除該行代碼。 – m4rkk 2011-10-23 15:51:53

回答

7

有一件事情你還沒有在MainWindow.xib中完成:添加導航控制器的視圖窗口。

self.window.rootViewController = self.navigationController; 

做到了這一點。替代方案(以及我們在iOS 3中編寫的內容)是:

[self.window addSubview:self.navigationController.view]; 
+0

謝謝奧萊 - 但是你明白爲什麼這不是在IB中完成的?是否有理由讓IB獲得很多其他的聯繫,但沒有這個聯繫?我不確定是否有充足的理由,或者這是否是蘋果未來可以實施的IB功能? – Greg 2011-04-23 11:52:13

+0

那麼,IB只是缺乏將視圖控制器的視圖添加到另一個視圖的功能。我同意讓IB更容易理解,這將是很好的。同時,我希望能夠在兩個視圖在不同的NIB文件中定義時將視圖添加到另一個視圖。 – 2011-04-23 11:55:48

+2

有一點需要注意,self.window.rootViewController是*不是* RootViewController的實例,也不是您在IB中看到的RootViewController的IBOutlet(即self.rootViewController)。這讓我感到困惑,直到我注意到其中的差異。 – DOOManiac 2011-04-23 17:55:34