如何从分离的视图控制器中呈现视图控制器?

时间:2017-09-20 22:17:09

标签: ios swift

我正在尝试以模态方式呈现视图控制器并获得着名的Presenting view controllers on detached view controllers is discouraged错误。我对它进行了研究,并且共识解决方案似乎是从父母那里做出来的,我试过但没有成功。我怀疑问题是因为导航控制器是从一个struct实例化为一个静态属性(为了让其他视图控制器更容易弹出到root,因为这是UX所要求的)。

struct SectionNavigationControllers {
    static var one = SectionNavigationController()
    static var two = SectionNavigationController()
    static var three = SectionNavigationController()
    static var four = SectionNavigationController()
}

这里是创建其中一个导航控制器的地方(使用此结构):

let SectionOneRoot = MasterSearchViewController()

func addNavigationController() {

    self.addChildViewController(SectionOneRoot)
    SectionOneRoot.didMove(toParentViewController: self)
    SectionNavigationControllers.one = SectionNavigationController(rootViewController: SectionOneRoot)
    view.addSubview(SectionNavigationControllers.one.view)

}


因此,当我尝试从MasterSearchViewController(根视图控制器)以模态方式呈现视图控制器时,我得到了所述错误。

navigationController?.present(Random200ViewController(), animated: true, completion: nil)


想法?

2 个答案:

答案 0 :(得分:1)

如果你想在你的应用程序的根viewController上呈现它,你可以这样做:

let rootVC = UIApplication.shared.keyWindow?.rootViewController

rootVC?.present(Random200ViewController(), animated: true, completion: nil)

答案 1 :(得分:1)

这是一个便利功能,您可以添加到任何代码中,以便在应用中的任何位置显示视图控制器:

func showModally(_ viewController: UIViewController) {
    let window = UIApplication.shared.keyWindow
    let rootViewController = window?.rootViewController
    rootViewController?.present(viewController, animated: true, completion: nil)
}

我希望它有所帮助!