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 以紧凑尺寸启动时未加载其子级