gpt4 book ai didi

ios - 如何获取当前显示的 UIViewController 不在 AppDelegate 中?

转载 作者:搜寻专家 更新时间:2023-10-30 22:03:22 28 4
gpt4 key购买 nike

我正在尝试获取不在 AppDelegate 中的当前显示 UIViewController,但它似乎总是获取初始顶部 UIViewController,而不是当前显示的 UIViewController .

AppDelegate 中的以下代码确实获得了当前的 UIViewController,但是当我在我的任何一个 View Controller 中使用它时,这个相同的功能不起作用:

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类。

最佳答案

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

static func getTopViewController() -> UIViewController {

var viewController = UIViewController()

if let vc = UIApplication.shared.delegate?.window??.rootViewController {

viewController = vc
var presented = vc

while let top = presented.presentedViewController {
presented = top
viewController = top
}
}

return viewController
}

**编辑:

这是一个改进的版本,它总是获取最顶层的 View Controller

static var top: UIViewController? {
get {
return topViewController()
}
}

static var root: UIViewController? {
get {
return UIApplication.shared.delegate?.window??.rootViewController
}
}

static func topViewController(from viewController: UIViewController? = UIViewController.root) -> UIViewController? {
if let tabBarViewController = viewController as? UITabBarController {
return topViewController(from: tabBarViewController.selectedViewController)
} else if let navigationController = viewController as? UINavigationController {
return topViewController(from: navigationController.visibleViewController)
} else if let presentedViewController = viewController?.presentedViewController {
return topViewController(from: presentedViewController)
} else {
return viewController
}
}

关于ios - 如何获取当前显示的 UIViewController 不在 AppDelegate 中?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41073915/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com