如何在多个内联UINavigationControllers之间进行转换?

时间:2016-11-04 19:00:50

标签: ios swift uinavigationcontroller uitabbarcontroller

我目前正在开发一个应用程序,其转换如下:

表视图控制器(嵌入在导航控制器中) - > 标签栏视图控制器 - > 4个视图控制器中的1个(每个都嵌入在自己的导航控制器中)

在转换到4个嵌入式视图控制器中的1个之后,我希望“新”导航控制器接管,同时仍然保持先前转换的堆栈(以便用户可以轻松返回)。不幸的是,事情的方式,原始导航似乎涵盖了新生成的导航(其标题可以隐藏在顶部栏后面)。

我希望尽可能避免使用程序化方法,因为我更喜欢“故事板”。

BTW:我正在使用Xcode 6.2中的Swift进行开发

感谢。

1 个答案:

答案 0 :(得分:0)

更新您的代码和项目,学习Swift 3,并学习程序化更改。如果您有任何成为优质iOS开发人员的愿望,那么学会接受变革是迈向自身成功的重要一步。在代码中添加导航控制器非常容易。强制通过故事板完成所有事情只会限制自己。我使用本教程帮助我开始学习如何处理代码中的东西。 https://www.raywenderlich.com/78568/create-slide-out-navigation-panel-swift

使用它来实现NavigationController,确保您在导航控制器中具有与故事板中相同的恢复标识符,以及我所说的" Main"它具有导航控制器所在的故事板的名称。

private extension UIStoryboard {
    class func mainStoryboard() -> UIStoryboard {
        return UIStoryboard(name: "Main", bundle: Bundle.main)
    }
    class func someNavigationController() -> UINavigationController? {
        return mainStoryboard().instantiateViewController(withIdentifier: "SomeNavigationController") as? UINavigationController
    }
}

作为类变量make:

var someNavigationController: UINavigationController!
var someViewController: UIViewController!

在要显示导航控制器的功能中,如下所示:

someNavigationController = UIStoryboard.someNavigationController()!
someViewController = someNavigationController.childViewControllers.first! as! EiValueTableViewController
someNavigationController.view.frame = CGRect(x: 0, y: 0, width: view.frame.width, height: view.frame.height)
view.addSubview(someNavigationController.view)
addChildViewController(someNavigationController)
someNavigationController.didMove(toParentViewController: self)

我有很多视图控制器,我做这种事情。它们完全在故事板中制作,但是这允许您以任何您想要的方式使用它们,而不是被迫仅使用segue进行转换。如果您仍然拒绝以编程方式执行操作,那么您可以转换到SplitViewController,它应该很容易找到指南,但我发现它们远远不能用于此类用途。