确定rootViewController的类

时间:2015-12-15 18:11:23

标签: swift uistoryboardsegue

我试图确定rootViewController的类,因为我不想在所有屏幕上显示推送通知。但是,以下行在我的项目的每个视图中都会被验证为true:

print(UIApplication.sharedApplication().keyWindow?.rootViewController!.isKindOfClass(TabView))

为了进一步检查问题,我已经在Storyboard的所有视图中添加了标题。执行此操作后,我尝试打印iPhone /模拟器上显示的当前屏幕的标题。然而,打印出一个与我期望的不同的标题:

UIApplication.sharedApplication().keyWindow?.rootViewController!.title

1 个答案:

答案 0 :(得分:2)

当您显示模态视图控制器时,窗口上的rootViewController不受影响。它仍设置为原始rootViewController

请考虑以下事项:

let tabController = TabView()
self.window.rootViewController = tabController

let modalController = UINavigationController()
self.window.rootViewController.presentModalViewController(modalController,animated:false completion:nil)

self.window.rootViewControler未更改,如果您检查它的类,您将看到始终匹配TabView

您要做的是实际获得最顶层的 VISIBLE 视图控制器。

要执行此操作,您需要获取rootViewController,并检查它是否以模态方式显示任何视图控制器,并继续递归跟踪它,直到找不到另一个控制器。拥有最顶层的视图控制器后,检查它的类以查看它是否与您正在进行的TabView匹配。

请参阅https://stackoverflow.com/a/29817515/4761517以获取有关如何查找最顶层viewcontroller的示例实现。