用另一个导航控制器替换当前导航控制器

Posted

技术标签:

【中文标题】用另一个导航控制器替换当前导航控制器【英文标题】:Replace current navigation controller with another navigation controller 【发布时间】:2016-05-18 19:46:26 【问题描述】:

我试过用:

self.navigationController?.setViewControllers([anotherNavController], animated: true)

但是,我收到了NSException。我假设您不能在另一个中使用UINavigationController,因为将setViewControllers() 与普通视图控制器一起使用可以正常工作。

我只需要关闭当前的 navigationController 并呈现另一个 navigationController,这样当新的 navigationController 被关闭时,将来旧的 navigationController 就不会重新出现了。

我正在使用 PageMenu,这会使事情复杂化。

我需要更换整个导航控制器的示例:

此代码初始化 ViewDidAppear 中的 PageMenu:

 // Initialize scroll menu
    pageMenu = CAPSPageMenu(viewControllers: controllerArray, frame: CGRectMake(0.0, 0.0, self.view.frame.width, self.view.frame.height), pageMenuOptions: parameters)

    self.addChildViewController(pageMenu!)
    self.view.addSubview(pageMenu!.view)

    pageMenu!.didMoveToParentViewController(self)

【问题讨论】:

你为什么要替换整个 navigationController?你不能只替换里面的viewController吗? 很遗憾,没有。我正在使用github.com/HighBay/PageMenu,如果它没有出现在它自己的导航控制器中,它就不能正确显示。 从您发布的图片来看,您似乎只需要在顶部添加一些填充,而不是替换 navigationController 您的AppDelegate 设置如何?您是在实例化您的自定义 navController,还是在实例化默认值? 我使用的是标准的导航控制器。我将如何添加填充? 【参考方案1】:

如果您在没有 StoryBoard 的情况下设置 PageMenu,则需要在 AppDelegate 中实例化 rootViewController。这应该不需要从默认的navigationController 切换到您自己的。

var window: UIWindow?

func application(application: UIApplication, didFinishLaunchingWithOptions launchOptions: [NSObject: AnyObject]?) -> Bool 

    self.window = UIWindow(frame: UIScreen.mainScreen().bounds)

    self.window?.rootViewController = YourViewController(nibName: "YourViewController", bundle: nil)

    self.window?.makeKeyAndVisible()

    return true

有关设置不带 StoryBoard 的 PageMenu 的更多帮助,请查看演示代码 here。

【讨论】:

感谢您的帮助。我仍在为我的大多数控制器使用故事板,因此应用程序功能中的代码不适用于我。但是,我仍然将需要导航控制器的视图控制器设为 XIB 文件。选项卡仍在顶部,因此我将它们向下移动: pageMenu = CAPSPageMenu(viewControllers: controllerArray, frame: CGRectMake(0.0, 63.0, self.view.frame.width, self.view.frame.height - 80), pageMenuOptions:参数)我毕竟能够使用 setViewControllers 并且仍然获得彩色背景。

以上是关于用另一个导航控制器替换当前导航控制器的主要内容,如果未能解决你的问题,请参考以下文章

在导航控制器上添加片段而不是替换片段?

编辑时如何用导航控制器中的另一个 UIBarButtonItem 替换后退按钮?

从一个 ViewController 导航到另一个 ViewController

如何用 UISearchBar 替换导航栏?

如何将自定义导航栏链接到导航控制器?

导航组件替换/更改后台堆栈