self.window.rootViewController vs window addSubview

Gaz*_*zer 49 iphone objective-c

我在应用程序代理中注意到很多iPhone应用程序的例子

- (void)applicationDidFinishLaunching:(UIApplication *)application

[window addSubview: someController.view]; (1)

而不是

self.window.rootViewController = self.someController; (2)

是否有任何实际理由使用一个而不是另一个?技术上是否正确?控制器是否具有与数字(2)相同的命令

self.someController.rootController = self.someOtherController; // pseudocode

Tom*_*ift 49

UIWindow rootViewController属性是iOS4的新功能.

较旧的技术是使用addSubview.

新的,推荐的技术是设置rootViewController.

  • 为什么建议在addSubview上设置rootViewController是什么原因? (7认同)
  • 不要合并两种技术!它会导致奇怪的行为,有时会导致自转停止工作. (2认同)

jas*_*der 10

只是对ios 6发布的更新.

如果仍然使用 - [UIWindow addsubview:]样板文件,您现在可能会在控制台中收到消息"应用程序窗口应该在应用程序启动结束时有一个根视图控制器".以及您的应用中潜在的轮换问题和布局问题.

如上所述设置窗口的rootViewController也会解决这个问题.


Ron*_*Ron 5

我用这个代码:

    rootViewController_ = [[RootViewController alloc] initWithFrame:[UIScreen mainScreen].bounds];
    window_ = [[UIWindow alloc] initWithFrame:[UIScreen mainScreen].bounds];
    if ([window_ respondsToSelector:@selector(setRootViewController:)]) { // >= ios4.0
        [window_ setRootViewController:rootViewController_];
    } else { // < ios4.0
        [window_ addSubview:rootViewController_.view];
    }
Run Code Online (Sandbox Code Playgroud)