如何以编程方式添加多个导航控制器?

时间:2016-08-21 09:16:33

标签: ios swift uinavigationcontroller

我的应用程序从视图A开始,所有视图都有一个带有4个按钮的标签栏 让你跳到A,B,C,D

stacks

我现在拥有的是这种情况:

  

如果你导航到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的顶部

问题:我假设我需要多个导航控制器,对吧?我还把它放在didFinishLaunchingWithOptions appDelegate函数中,如何以编程方式执行多个导航控制器?在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

1 个答案:

答案 0 :(得分:1)

你的AppDelegate中应该有一个通用的UINavigationController,它包含一般的应用程序NavigationController,在那个标签导航控制器里面你可以用UIViewController作为rootviewcontroller添加所有的导航控制器。

这将为每个选项卡使用导航控制器,该选项卡将处理该路径内的导航。如果用户在选项卡之间导航,那么这些选项卡将在该选项卡中具有最新的viewcontroller。 为了以编程方式执行此操作,我创建了nav控制器对象并将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)

我考虑一个很好的做法来创建一个包装类,其中包含app navigationController和NavigationControllers数组以及在需要时推送/设置导航的方法。看起来类似question

我希望它有所帮助。