如何从 UIApplication 切换视图控制器

Posted

技术标签:

【中文标题】如何从 UIApplication 切换视图控制器【英文标题】:How to switch view controllers from UIApplication 【发布时间】:2014-08-30 13:15:22 【问题描述】:

基本上,我在 uiapplication 中设置了一个计时器来检查用户是否空闲,我想要发生的是,如果用户空闲足够长的时间,顶部的视图控制器将是初始登录。

计时器部分有效,我用 NSlog 试过了。

所以基本上,我需要找出当前的视图控制器,如果不是注册或登录视图控制器,它应该去初始登录视图控制器。

如何在 UIapplication 类中获取当前视图控制器,然后进行切换?

如果有任何帮助,我使用的是导航控制器,而不是标签栏控制器。

【问题讨论】:

【参考方案1】:

您可以使用 sharedApplication 单例检索应用程序的根视图控制器:

AppDelegate *appDelegate = [[UIApplication sharedApplication] delegate];
UINavigationController *rootNavController = appDelegate.mainWindow.rootViewController;
// Change to what you want your rootViewController

【讨论】:

你想要mainWindow,而不是windows。此外,指出要获得对当前视图控制器的引用可能会有所帮助,他可能需要在导航控制器上调用lastObject 我现在为您修复了它,因为您的修复仍然错误。不过,在您区分导航控制器和位于导航堆栈顶部的视图控制器之间的区别之前,我仍然无法对此表示赞同。 你错过了修复 rootNavController 应该是一个参考...悲伤的脸 ;-)【参考方案2】:

您可以在 navigationController 堆栈上查看所有视图控制器。

见self.navigationController.topViewController和self.navigationController.visibleViewController;

【讨论】:

如果他的应用代理没有navigationController 属性(它可能不应该)? "如果有帮助的话,我使用的是导航控制器,而不是标签栏控制器。" 我看到并阅读了这部分问题。他使用导航控制器本身并不能保证他的应用委托类具有navigationController 属性,也不能保证他正确设置了该属性,即使他已经创建了该属性。

以上是关于如何从 UIApplication 切换视图控制器的主要内容,如果未能解决你的问题,请参考以下文章

AngularJS:如何从控制器功能切换视图?

如何从 AppDelegate.swift 路由到任何视图控制器

对于 Iphone,如何从当前加载的视图中引用根视图控制器,以便可以替换/切换视图

如何从标签栏视图控制器切换到另一个作为导航控制器子视图的视图

在 UITabBarController 中,如何从一个视图控制器切换到另一个视图控制器并保留标签栏?

如何从 AppDelegate 打开特定的选项卡视图