尝试呈现 * 其视图不在窗口层次结构中

Posted

技术标签:

【中文标题】尝试呈现 * 其视图不在窗口层次结构中【英文标题】:Attempt to present * whose view is not in the window hierarchy 【发布时间】:2016-10-28 11:02:06 【问题描述】:

我在AppDelegate 中使用以下代码在选择按钮时在应用程序中显示一个弹出窗口,我最终会将其移动到标签超链接,但目前只是测试。

    let storyboard = UIStoryboard(name: "Main", bundle: nil).instantiateViewControllerWithIdentifier("test") as! ViewController
    let popOverVC = UIStoryboard(name:"Main", bundle: nil).instantiateViewControllerWithIdentifier("sbPopUpID") as! PopUpViewController
    storyboard.addChildViewController(popOverVC)
    popOverVC.view.frame = storyboard.view.frame
    storyboard.view.addSubview(popOverVC.view)
    popOverVC.didMoveToParentViewController(storyboard)
    self.window?.rootViewController?.presentViewController(storyboard, animated: true, completion: nil)

我第一次选择一个按钮时它可以正常工作,但是在所有后续按钮按下时都会显示以下错误

2016-10-28 11:27:40.551 testfordeeplinks[20496:104536] 警告: 尝试呈现 谁的观点不是 在窗口层次结构中!

【问题讨论】:

【参考方案1】:

对于将来偶然发现此问题的任何人,这就是我解决的方法;

    let appDelegate = UIApplication.sharedApplication().delegate as! AppDelegate
    appDelegate.window?.rootViewController = storyboard

【讨论】:

【参考方案2】:

rootViewController 不一定指当前可见的视图控制器。例如,如果您使用UINavigationControllerrootViewController 将持有对该导航控制器的引用,该导航控制器本身深埋在视图层次结构中,因此当您尝试在其上显示视图控制器时会出错。我建议做的是抓住navController.viewControllers 中的最后一个视图控制器并在上面显示您的弹出窗口。见以下代码:

let appDel = UIApplication.sharedApplication().delegate as! AppDelegate
if let navController = appDel.keyWindow?.rootViewController as? UINavigationController 
    if let visibleVC = navController.viewControllers.last 
        visibleVC.presentViewController(storyboard, animated: true, completion: nil)
    

试一试,让我知道。 :)

【讨论】:

感谢 Jacob,这将返回以下错误:Downcast from"UIViewController" only unwraps optionals, you mean to use '!'? 我没有看到错误,所以我猜你只是忘记粘贴了? :P 来自"UIViewController" 的向下转换仅解包选项,你的意思是使用'!'吗? 哎呀,我的错,我想这就是当您尝试记住确切的语法时会发生的事情!请参阅修改后的答案。 感谢更新,但它似乎没有超过第一个 if 语句,所以视图控制器永远不会加载,有什么想法吗? @雅各布·金

以上是关于尝试呈现 * 其视图不在窗口层次结构中的主要内容,如果未能解决你的问题,请参考以下文章

尝试在其视图不在窗口层次结构中的 UIViewController 上呈现 UIViewController

尝试在其视图不在窗口层次结构中的 UIViewController 上呈现 UIViewController

尝试在其视图不在窗口层次结构中的 UIViewController 上呈现 UIViewController

尝试在其视图不在窗口层次结构中的 UIViewController 上呈现 UIViewController

警告:尝试在其视图不在窗口层次结构中的 * 上呈现 * - swift

如何解决此错误“警告:尝试呈现其视图不在窗口层次结构中”?