如何以编程方式添加多个导航控制器?
Posted
技术标签:
【中文标题】如何以编程方式添加多个导航控制器?【英文标题】:How to add multiple navigation controllers programatically? 【发布时间】:2016-08-21 09:16:33 【问题描述】:我的应用从视图 A 开始,所有视图都有一个带有 4 个按钮的标签栏 那让你跳到A、B、C、D
我目前拥有的是这种情况:
如果您导航到 A、B、C、D 中的任何一个,您将返回堆栈底部 上面所有的都被消灭了。
但我需要它像这张图片一样,例如这些导航发生了
1: A>1
2: B>3>7
3: C>2>5>6>8>7
4: D>9>1
现在当我从 1 移动到 B 时,我回到 7,即 B 的顶部
问题:我认为我需要多个导航控制器,对吧?我也把它放在appDelegate
的didFinishLaunchingWithOptions
函数中,如何以编程方式执行多个导航控制器?以及在 A、B 推送或加载视图控制器之间使用什么?
////////// NC
let storyboard = UIStoryboard(name: "Main", bundle: nil)
let mainView = storyboard.instantiateViewControllerWithIdentifier("selectLocation") as! selectLocation // 1 Home
let searchView = storyboard.instantiateViewControllerWithIdentifier("2") as! Search // 1 Home
let friendsView = storyboard.instantiateViewControllerWithIdentifier("3") as! Friends // 1 Home
let meView = storyboard.instantiateViewControllerWithIdentifier("4") as! Me // 1 Home
var nav1 = UINavigationController()
nav1.viewControllers = [mainView]
nav1.navigationBar.titleTextAttributes = [NSForegroundColorAttributeName: UIColor.whiteColor()]
var nav2 = UINavigationController()
nav2.viewControllers = [searchView]
nav2.navigationBar.titleTextAttributes = [NSForegroundColorAttributeName: UIColor.whiteColor()]
var nav3 = UINavigationController()
nav3.viewControllers = [friendsView]
nav3.navigationBar.titleTextAttributes = [NSForegroundColorAttributeName: UIColor.whiteColor()]
var nav4 = UINavigationController()
nav4.viewControllers = [meView]
nav4.navigationBar.titleTextAttributes = [NSForegroundColorAttributeName: UIColor.whiteColor()]
UINavigationBar.appearance().barTintColor = UIColor(red: 176.0/255.0, green: 190.0/255.0, blue: 105.0/255.0, alpha: 1.0)
UINavigationBar.appearance().tintColor = UIColor.whiteColor()
UINavigationBar.appearance().barStyle = UIBarStyle.BlackTranslucent
self.window!.rootViewController = nav1
self.window?.makeKeyAndVisible()
////////// NC
【问题讨论】:
notice : - 我已经解决了这个问题,如果您需要解决方案,我将准备一个示例 github 项目并在此处链接。 你有没有机会获得该 GitHub 示例? 【参考方案1】:您的 AppDelegate 中应该有一个通用的 UINavigationController
,其中包括通用应用 NavigationController,在该选项卡导航控制器内,您可以添加所有带有 UIViewController
的导航控制器作为 rootviewcontroller。
这将为每个选项卡使用导航控制器,该控制器将处理该路径内的导航。如果用户在选项卡之间导航,则这些选项卡将在该选项卡中具有最新的视图控制器。 要以编程方式执行此操作,我将创建导航控制器对象并将 rootviewcontroller 设置为堆栈中的第一个。
您可以通过这种方式为每个选项卡启动导航。
private lazy var navigationController:UINavigationController? =
let navigationController = UINavigationController(rootViewController: InitialViewController())
navigationController.setNavigationBarHidden(true, animated: false)
return navigationController
()
然后每个用户点击您需要推送另一个 UIViewController
self.navigationController?.pushViewController(vc, animated: animated)
这样你就可以回到堆栈中。
如果需要,您可以通过这种方式更改 rootViewController
self.navigationController?.setViewControllers([vc], animated: animated)
我会考虑创建一个包装类的好习惯,其中包括应用程序 navigationController 和 NavigationControllers 数组以及在需要时推送/设置导航的方法。看看这个类似question
希望对你有所帮助。
【讨论】:
好,但我把“私人懒惰....”sn-p 放在委托中?为什么不创建4?我可以看到你只创建了一个,你能提供一个详细的例子吗?这个问题仍然让我感到困惑...... [添加 4 个导航控制器] 到问题的代码中。 对不起,我正在努力完成这项工作,阅读了 ios 书籍中的部分,仍然感到困惑,我搜索了很多,做了很多实验,并应用了上面的内容并看到了你的链接发布和其他链接,github上没有关于此的任何示例吗?请尝试帮助我,我被卡住了,懒惰的变量放在哪里?我试图将该 var 放在每个选项卡视图中确实加载。 当我添加惰性变量i.imgur.com/xkC9tpa.png时会出现这种情况@ 我不能只写整个例子。 navigationController 的惰性 var 只是一个想法。我不知道你的代码结构。从图形上看,这个想法是***.com/a/25790498/2000162,而将视图控制器添加到导航控制器的方式是***.com/a/27592135/2000162 我已经解决了这个问题,如果有人需要解决方案,我会准备一个示例 github 项目并在此处链接。以上是关于如何以编程方式添加多个导航控制器?的主要内容,如果未能解决你的问题,请参考以下文章
如何向在 tabcontroller 中以编程方式创建的导航控制器中的 barbuttonitem 添加操作