尝试显示其视图不在窗口层次结构中的*

时间:2016-10-28 11:02:06

标签: swift uiviewcontroller appdelegate

我在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]警告:   试图出席   在他看来不是   在窗口层次结构中!

2 个答案:

答案 0 :(得分:3)

对于任何未来偶然发现这种情况的人来说,这就是我解决的问题;

https://svn/path/branches/releases/Release_10_1

答案 1 :(得分:0)

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)
    }
}

尝试一下,让我知道。 :)