如何在AppDelegate中显示当前显示的UIViewController?

时间:2016-12-10 09:10:43

标签: ios swift uiviewcontroller swift3

我试图获取不在AppDelegate中的当前显示UIViewController,但它似乎总是得到最初的UIViewController,而不是现在的。{/ p >

AppDelegate中的以下代码可以获得当前的UIViewController,但是当我在任何一个View Controllers中使用它时,同样的功能都不起作用:

func getTopViewController() -> UIViewController
{
    var topViewController = UIApplication.sharedApplication().delegate!.window!!.rootViewController!
    while (topViewController.presentedViewController != nil) {
        topViewController = topViewController.presentedViewController!
    }
    return topViewController
}

上述代码在类似问题中作为答案提供: Get the current displaying UIViewController on the screen in AppDelegate.m

无论我有多么深刻,我都只能检索出最前面的View Controller。

如何获得当前呈现的UIViewController

仅供参考:我使用UINavigationController ,只使用常规UIViewController课程。

2 个答案:

答案 0 :(得分:18)

我不喜欢使用它,但有时候这是必要的。

std::string

**编辑:

这是一个改进版本,它将始终获得最顶级的视图控制器

const char*

答案 1 :(得分:1)

以下是一个函数中的相同想法:

func topController(_ parent:UIViewController? = nil) -> UIViewController {
    if let vc = parent {
        if let tab = vc as? UITabBarController, let selected = tab.selectedViewController {
            return topController(selected)
        } else if let nav = vc as? UINavigationController, let top = nav.topViewController {
            return topController(top)
        } else if let presented = vc.presentedViewController {
            return topController(presented)
        } else {
            return vc
        }
    } else {
        return topController(UIApplication.shared.keyWindow!.rootViewController!)
    }
}

在Swift 4项目中为我工作