2012-03-21 46 views
2

我是UISplitView开发的新手,所以我确信有一些明显的我做错了。我有一个基本的UISplitView iPad应用程序,当应用程序启动时加载两个UITableView控制器。这工作得很好。问题呈现在UISplitView加载后以模态方式查看

我试图做的是立即启动,以模态方式呈现“身份验证”视图,以便用户在继续之前需要登录。这是我迄今为止的代码编译和工作没有中断,但没有显示视图。

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions { 
    self.window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]]; 

    MasterViewController *masterViewController = [[MasterViewController alloc] initWithNibName:@"MasterViewController" bundle:nil]; 
    UINavigationController *masterNavigationController = [[UINavigationController alloc] initWithRootViewController:masterViewController]; 

    DetailViewController *detailViewController = [[DetailViewController alloc] initWithNibName:@"DetailViewController" bundle:nil]; 
    UINavigationController *detailNavigationController = [[UINavigationController alloc] initWithRootViewController:detailViewController]; 

    self.splitViewController = [[UISplitViewController alloc] init]; 
    self.splitViewController.delegate = detailViewController; 
    self.splitViewController.viewControllers = [NSArray arrayWithObjects:masterNavigationController, detailNavigationController, nil]; 

    masterViewController.detailViewController = detailViewController; 
    masterViewController.managedObjectContext = self.managedObjectContext; 

    self.window.rootViewController = self.splitViewController; 
    [self presentAuthenticate]; 
    [self.window makeKeyAndVisible]; 

    applicationDidLaunch = YES; 
    return applicationDidLaunch; 
} 

- (void) presentAuthenticate { 
    AuthenticateViewController *loginController = [[AuthenticateViewController alloc] initWithNibName:@"AuthenticateViewController" bundle:nil]; 
    [loginController setModalTransitionStyle:UIModalTransitionStyleCoverVertical]; 
    [loginController setModalPresentationStyle:UIModalPresentationFormSheet]; 

    if ([self.splitViewController respondsToSelector:@selector(presentViewController:animated:completion:)]) { 
     [self.splitViewController presentViewController:loginController animated:NO completion:nil]; 
    } else { 
     [self.splitViewController presentModalViewController:loginController animated:NO]; //iOS 4 works fine with or without animation 
    } 
} 

我将AuthenticateViewController定义为一个视图,其中包含几个文本框并将其连接到文件的所有者视图。

提前致谢!

回答

2

除非和直到视图完成加载,否则ViewController将不允许推送/呈现在另一个视图上。

简单的说我们不允许在viewcontroller中调用presentModalViewController/pushViewController viewDidLoad/viewWillAppear。我们需要在viewDidAppear中调用它。

我有同样的问题,你说。

一些解决方案,我可以说是,

  1. 后做AuthenticateViewController的装载[self.window makeKeyAndVisible]并在一个performSelctor(可能有一个延迟)。
  2. 移动代码以在SplitView的DetailView控制器viewDidAppear中显示AuthenticateViewController。

感谢,

纳文珊

+0

我与你选择2号去了,它工作正常,谢谢! – rwyland 2012-03-25 02:56:07