2016-08-21 108 views
0

我的应用程序在视图中的开始,所有的观点有4个按钮 ,让你跳转到A,B,C的一个TabBar,所以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 
+0

注意: - 我已经解决了这个问题,如果你需要解决方案,我将准备一个示例github项目并链接到它。 – DeyaEldeen

+0

你有没有可能获得GitHub示例的机会? – SQLiteNoob

回答

1

你应该在你的AppDelegate一般的UINavigationController,其中包括一般的应用NavigationController,即标签导航控制器内,你可以用自己的UIViewController添加所有navigationcontrollers为RootViewController的。

这将使用每个选项卡的导航控制器来处理该路径内的导航。如果用户在选项卡之间导航,那些选项卡将在该选项卡中具有最新的视图控制器。 要以编程方式完成此操作,我会创建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)

我会考虑一个很好的做法,创建一个包装类,其中包括该应用navigationController和NavigationControllers和方法来推动的阵列/设置导航以防万一需要。看看这个类似的question

我希望它有帮助。

+0

不错,但是我在代表中放置了“private lazy ....”片段? 为什么不创建4?我可以看到你只创建了一个,请你提供一个详细的例子吗?这个问题仍然有点困惑我...[添加4个导航控制器]到问题的代码。 – DeyaEldeen

+0

是的,我刚刚添加一个作为例子。 – TomCobo

+0

对不起,我努力做这个工作,阅读iOS书籍的部分,但仍然困惑,我搜索了很多,并做了大量的实验,并应用上面的内容,看到您发布的链接和其他链接, github上有关于这个的例子吗?请尽量帮助我我卡住了,在哪里放懒惰的变种?我试图把这个var放在每个标签视图中。 – DeyaEldeen

相关问题