【问题标题】:UISplitViewController won't present modal view controllerUISplitViewController 不会显示模态视图控制器
【发布时间】:2012-03-20 19:01:44
【问题描述】:

在显示拆分视图控制器之前,我需要先显示一个模态视图控制器。我需要这个,因为用户必须登录。

我已阅读此论坛上的答案,建议应从 AppDelegate 呈现模态视图控制器,但尝试这样做时,没有任何反应。

我已经在同一个故事板中设置了我的视图控制器,作为我的界面的其余部分,我给视图控制器提供了标识符loginViewController。我试图在 AppDelegate 中显示视图控制器,如下所示:

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
    if (UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPad)
    {
        UISplitViewController *splitViewController = (UISplitViewController *) self.window.rootViewController;
        UINavigationController *navigationController = splitViewController.viewControllers.lastObject;
        splitViewController.delegate = (id) navigationController.topViewController;

        UIStoryboard *storyboard = [UIStoryboard storyboardWithName:@"MainStoryboard_iPad" bundle:nil];
        LoginViewController *lvc = (LoginViewController *) [storyboard instantiateViewControllerWithIdentifier:@"loginViewController"];
        lvc.modalPresentationStyle = UIModalPresentationFullScreen;
        [splitViewController presentModalViewController:lvc animated:YES];
    }

    [_window makeKeyAndVisible];

    return YES;
}

当我这样做时,什么都没有发生。没有错误,没有模态视图控制器,什么都没有。该应用程序只显示我的拆分视图控制器。

谁能告诉我如何在显示拆分视图控制器之前显示模态视图控制器?

【问题讨论】:

    标签: iphone ipad uisplitviewcontroller modalviewcontroller


    【解决方案1】:

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

    简单地说,我们不允许在视图控制器 viewDidLoad/viewWillAppear 中调用 presentModalViewController/pushViewController。我们需要在 viewDidAppear 中调用它。

    我遇到了你说的同样的问题。

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

    在[self.window makeKeyAndVisible]之后加载LoginViewController;并在 performSelctor 中(可能有延迟)。 移动代码,在 SplitView 的 DetailView 控制器 viewDidAppear 中显示 LoginViewController。

    谢谢,

    纳文山

    【讨论】:

    • 在 AppDelegate 中显示模态视图控制器之前调用 [_window makeKeyAndVisible] 可以解决问题。没有必要做一个performSelector 或延迟做。感谢您的帮助。
    • 你是对的@SimonBS,但最好使用 performSelector 因为如果应用程序在 5 秒内无法启动,它将被看门狗定时器杀死。
    【解决方案2】:

    不要在 AppDelegate.m 中执行,而是在 DetailViewController 中执行:

    LogInViewController *logInVC = [[LogInViewController alloc] init];
    [self presentModalViewController:logInVC animated:NO];
    

    这对我有用。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-04-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-10-25
      • 1970-01-01
      相关资源
      最近更新 更多