【问题标题】:Attempt to present UIAlertController on UITabBarController whose view is not in the window hierarchy尝试在其视图不在窗口层次结构中的 UITabBarController 上呈现 UIAlertController
【发布时间】:2016-11-29 08:24:02
【问题描述】:

我的应用程序委托中有一个计时器,用户选择在另一个不在选项卡栏中的视图控制器中执行该计时器的选择器所需的时间间隔;选择时间间隔后,使用模态 segue 加载 UITabBarController 中的第一个 viewController

当时间间隔过去时,我希望应用程序显示警报,但它给了我这个:警告:尝试在其视图不在窗口层次结构中的 UITabBarController 上显示 UIAlertController!

这是我正在使用的代码:

let alert = UIAlertController(title: "alert", message: "test", preferredStyle: .Alert)
self.window?.rootViewController?.presentViewController(alert, animated: true, completion: nil)

【问题讨论】:

    标签: ios swift uiviewcontroller uitabbarcontroller uialertview


    【解决方案1】:

    首先尝试获取可见的视图控制器。你可以使用这个公共扩展来做到这一点:

     public extension UIWindow {
        public var visibleViewController: UIViewController? {
            return UIWindow.getVisibleViewControllerFrom(self.rootViewController)
        }
    
        public static func getVisibleViewControllerFrom(vc: UIViewController?) -> UIViewController? {
            if let nc = vc as? UINavigationController {
                return UIWindow.getVisibleViewControllerFrom(nc.visibleViewController)
            } else if let tc = vc as? UITabBarController {
                return UIWindow.getVisibleViewControllerFrom(tc.selectedViewController)
            } else {
                if let pvc = vc?.presentedViewController {
                    return UIWindow.getVisibleViewControllerFrom(pvc)
                } else {
                    return vc
                }
            }
        }
    }
    

    然后在这个vc中显示警报控制器

    【讨论】:

    • uitabbarcontroller 中的 uisplitviewcontroller 怎么样?
    猜你喜欢
    • 2023-03-31
    • 2018-06-06
    • 2017-07-27
    • 2020-08-07
    • 2016-01-06
    • 1970-01-01
    • 2014-02-02
    • 1970-01-01
    • 2017-04-01
    相关资源
    最近更新 更多