当自定义视图控制器添加为根视图控制器而不是导航控制器作为 self.window.rootViewController



我正在使用xcode 4.5.2的主从模板。我没有保留UINavigationController作为UIWindowrootViewController,而是用我自己的视图控制器替换它,并带有一个简单的初始屏幕作为其视图。显示初始屏幕后,我想将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;
}

LoginViewController是带有初始屏幕的自定义控制器。那么,使用导航控制器时如何从应用程序委托更改启动屏幕呢?(大纲-细节模板)

这可能不是这样做的方法。应保持主从结构不变(作为窗口的根视图控制器),并在应用首次启动时将初始屏幕显示为模式视图控制器。只需在主视图控制器的 viewDidLoad 方法中呈现您的 LoginViewController 和 presentViewController:animated。

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

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;
}

最新更新