【问题标题】:topViewController in iOS 12 / Xcode 10iOS 12 / Xcode 10 中的 topViewController
【发布时间】:2019-02-22 17:36:33
【问题描述】:

所以,我今天已更新到 Xcode 10 和 iOS 12,现在当我从 UINavigationController 调用 topViewController 时收到以下错误消息:

“topViewController”的模糊使用

if let myVC = navigationController.topViewController as? MyViewController {}

即使下面的代码运行良好。

if let myVC = navigationController.visibleViewController as? MyViewController {}

有谁知道 iOS 12 对此有何变化?

【问题讨论】:

  • topViewController 在 iOS12 中没有变化。我在Xcode10、iOS12中测试过,没有任何问题。你的navigationController是什么?
  • UINavigationController
  • 您是否还有另一个名为 topViewController 的变量?
  • 实际上有一个扩展UINavigationController的类和一个UIViewController的扩展,它有一个名为topViewController的变量。这是遗留代码,所以我不确定它为什么会这样创建。但是 Xcode 10/iOS 12 中的哪些变化使这段代码不再工作?

标签: xcode10 ios12 swift4.2


【解决方案1】:

我可以建议你使用这个函数来获取 topViewContoller 作为扩展。如您所想,易于使用。

extension UIApplication {
    class func topViewController(controller: UIViewController? = UIApplication.shared.keyWindow?.rootViewController) -> UIViewController? {
        if let navigationController = controller as? UINavigationController {
            return topViewController(controller: navigationController.visibleViewController)
        }
        if let tabController = controller as? UITabBarController {
            if let selected = tabController.selectedViewController {
                return topViewController(controller: selected)
            }
        }
        if let presented = controller?.presentedViewController {
            return topViewController(controller: presented)
        }
        return controller
    }
}

用法:

UIApplication.topViewController()

【讨论】:

    猜你喜欢
    • 2019-02-17
    • 2018-11-14
    • 1970-01-01
    • 2019-02-21
    • 2019-03-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多