如何从 appdelegate 呈现和关闭模态视图?

Posted

技术标签:

【中文标题】如何从 appdelegate 呈现和关闭模态视图?【英文标题】:How to present and dismiss modal view from appdelegate? 【发布时间】:2013-03-20 11:13:06 【问题描述】:

我在我的应用程序的 appdelegate 中,在 didFinishLaunchingWithOptions 中,我想在标签栏控制器上加载一个模式导航控制器(我没有“导航控制器”类,但故事板中只有一个导航控制器使用“segue”导航控制器的视图控制器)。然后我想回到标签栏控制器。 在 didFinishLaunchingWithOptions 中,我使用了这段代码,并且模态导航控制器工作正常:

UIStoryboard *storyboard = [UIStoryboard storyboardWithName:@"MainStoryboard_iPhone" bundle:nil];
UINavigationController *loginController = [storyboard instantiateViewControllerWithIdentifier:@"Login Controller"];
self.window.rootViewController = loginController;

但是当在我的模态视图控制器中“segue”导航控制器时,我尝试使用以下代码返回标签栏:

 [self dismissViewControllerAnimated:YES completion: nil];

什么都没有出现。怎么了?谢谢你。

【问题讨论】:

[self.navigatorcontroller presentviewController: Controller]; 您的问题更多是关于我如何解雇UINavigationController 这并不是真正的呈现。我说的对吗? 是的,但问题还在于我使用“根视图控制器”而不是模式转换加载导航控制器。我想在标签栏控制器上加载一个模态导航控制器,这样以后我可以使用dismissViewController 我知道这是旧的,但是@user2136333 你找到解决方案了吗? 【参考方案1】:

这就是我们如何设置哪个视图控制器需要成为 rootViewController(需要显示的 firstViewController)。

mainViewController = [[[MainViewController alloc] initWithNibName:@"MainViewController" bundle:nil] autorelease];

self.window.rootViewController = mainViewController;

【讨论】:

好的,但是我怎样才能解除你的 rootViewController 并返回 tabBarController? 不可能。但是您可以将 tabBarcontroller 设置为 rootView 控制器,并从 tabBarController 呈现另一个视图控制器。或者您可以从 rootViewController 呈现 tabBarController。 或者您可以通过分配'mainViewController.view = tabBarController.view'将rootViewController的视图更改为tabBarController的视图【参考方案2】:

使用

[self.navigatorcontroller presentviewController: Controller];

呈现视图控制器

您可以通过

将其关闭
[self dismissViewControllerAnimated:YES completion: nil];

【讨论】:

在 AppDelegate 中如果我使用 self.navigatorcontroller 会出错

以上是关于如何从 appdelegate 呈现和关闭模态视图?的主要内容,如果未能解决你的问题,请参考以下文章

关闭从模态呈现的视图控制器翻转的视图控制器

从 uitabbarController 视图中关闭模态视图

如何从模态视图控制器调用呈现视图控制器的方法

如何关闭模态视图控制器,然后立即让呈现视图控制器呈现不同的模态视图控制器?

为啥一个简单的模态视图控制器在呈现和关闭时会滞后?

使用故事板从应用程序委托呈现模态视图控制器