2011-04-23 45 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