将自定义viewController添加为根视图控制器而不是导航控制器作为self.window.rootViewController时,不会加载视图

时间:2012-12-01 16:55:35

标签: ios

我正在使用xcode 4.5.2的主 - 详细信息模板。我没有将UINavigationController保留为rootViewController的{​​{1}},而是使用我自己的ViewController将其替换为简单的启动画面作为其视图。显示启动画面后,我想将UIWindow推送为navigationController(包含主文件和self.window.rootviewController)。

问题是虽然我的detailViewControllers已初始化并且其ViewController已被调用,但其视图(启动画面未显示)。

viewDidLoad

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {self.window = [[[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]] autorelease]; if ([[UIDevice currentDevice] userInterfaceIdiom] == UIUserInterfaceIdiomPhone) {LoginViewController *loginViewController = [[[LoginViewController alloc] initWithNibName:@"LoginViewController_iPhone" bundle:nil] autorelease]; // loginViewController.masterViewController = loginViewController; [self.window setRootViewController:loginViewController]; [self.window addSubview:loginViewController.view]; if (BOOL condition is YES) { MasterViewController *masterViewController = [[[MasterViewController alloc] initWithNibName:@"MasterViewController_iPhone" bundle:nil] autorelease]; self.navigationController = [[[UINavigationController alloc] initWithRootViewController:masterViewController] autorelease]; //self.window.rootViewController = self.navigationController; } 是带有启动画面的自定义控制器。那么如何在使用导航控制器时从App委托更改启动画面? (主 - 详细模板)

1 个答案:

答案 0 :(得分:0)

这可能不是这样做的方法。您应该保留master-detail结构(作为窗口的根视图控制器),并在应用程序首次启动时将启动屏幕显示为模式视图控制器。只需使用presentViewController:animated:在主视图控制器的viewDidLoad方法中显示您的LoginViewController。

编辑后:如果你想按照你尝试的方式进行,你拥有的代码几乎是正确的。可以使用以下代码从登录控制器(而不是应用程序委托)完成此操作:

if (BOOL condition is YES) {
     MasterViewController *masterViewController = [[[MasterViewController alloc] initWithNibName:@"MasterViewController_iPhone" bundle:nil] autorelease];
     UINavigationController *navigationController = [[[UINavigationController alloc] initWithRootViewController:masterViewController] autorelease];
     self.view.window.rootViewController = navigationController;
}