用另一个导航控制器替换当前导航控制器
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 替换后退按钮?