iOS:UISplitViewController无法推送到UINavigationController

问题描述 投票:22回答:2

我有一个使用导航控制器的XCode iPad项目。我试图获得一个将UISplitViewController推送到导航堆栈的按钮,但出现此错误:

分割视图控制器无法推送到导航控制器

原来UISplitViewController与UINavigationController不能很好地配合使用。但是,单击此按钮时,我仍然需要显示拆分视图控制器。我该怎么做呢?而且,同样重要的是,如何制作后退按钮,以便可以将用户返回到导航控制器?

ios ios5 uinavigationcontroller uisplitviewcontroller
2个回答
31
投票

要显示SplitViewController,您需要使用setRootViewController。这是因为SplitViewController必须是根视图控制器。

摘自Apple文档:

拆分视图控制器必须始终是您任何接口的根创建。换句话说,您必须始终从UISplitViewController对象作为应用程序的根视图窗口。然后,拆分视图界面的窗格可能包含导航控制器,标签栏控制器或任何其他类型的视图控制器,您需要实现您的界面。

要取回,您需要使用setRootViewController返回上一页。当我将iPhone应用程序转换为通用应用程序时遇到了这个问题,最终在iPhone上使用了导航控制器,在iPad版本上使用了setRootViewController。这有点令人讨厌,因为您无法很好地为其设置动画without a bit of fudging


0
投票

不通过导航控制器推动拆分视图控制器可能,但是有另一种方法可以完成工作

您可以创建视图控制器,并将拆分视图控制器添加为子视图,然后可以通过导航控制器推送创建的视图控制器。它将显示您的拆分视图控制器,您可以同时使用主视图和细节。

*请记住将yoursplitviewcontroller类添加到情节提要中的自定义类中

[note splitcontroller->(主要,详细信息)

let splitVC = getViewController(storyBoardName: "story board name", viewControllerName: "split view controller identifier") as! yoursplitviewcontroller
        view.addSubview(splitVC.view)
        view.bounds = splitVC.view.bounds
        addChild(splitVC)

func getViewController(storyBoardName: String, viewControllerName: String) -> UIViewController{
        let storyBoard = UIStoryboard(name: storyBoardName, bundle: nil)
        return storyBoard.instantiateViewController(identifier: viewControllerName)
    }

如果有什么不清楚的地方,请给我发邮件-> [email protected]

© www.soinside.com 2019 - 2024. All rights reserved.