UISplitViewController 不会显示模态视图控制器

Posted

技术标签:

【中文标题】UISplitViewController 不会显示模态视图控制器【英文标题】:UISplitViewController won't present modal view controller 【发布时间】: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;

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

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

【问题讨论】:

【参考方案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];

这对我有用。

【讨论】:

以上是关于UISplitViewController 不会显示模态视图控制器的主要内容,如果未能解决你的问题,请参考以下文章

UISplitViewController 上带有 UIVisualEffectView 的 UIPopoverController - iPhone 6 plus 上的背景不会变得模糊

UINavigationController 与 UISplitViewController

UISplitViewController 没有正确旋转

UISplitViewController 以紧凑尺寸启动时未加载其子级

UISplitViewController 主幻灯片仅在旋转后才有效

iOS标题和自定义按钮未出现在uisplitviewcontroller的详细视图中