ios - 如何以编程方式添加多个导航 Controller ?

标签 ios swift uinavigationcontroller

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

stacks

我目前的情况是这样的:

if you navigate to either, A, B, C, D you go back to the stack bottom with all ones on top wiped out.

但我需要它像这张图片中那样表现,例如这些导航发生了

1: A>1
2: B>3>7
3: C>2>5>6>8>7
4: D>9>1

现在当我从 1 移动到 B 时,我回到 7,这是 B 的顶部

问题:我想我需要不止一个导航 Controller ,对吗?我还把它放在 appDelegatedidFinishLaunchingWithOptions 函数中,如何以编程方式执行多个导航 Controller ?以及在 A、B 推送或加载 View Controller 之间使用什么?

    ////////// 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

最佳答案

您的 AppDelegate 中应该有一个通用的 UINavigationController,其中包括通用应用 NavigationController,在该选项卡导航 Controller 中,您可以添加所有导航 Controller 及其 UIViewController 作为 Root View Controller 。

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

希望对您有所帮助。

关于ios - 如何以编程方式添加多个导航 Controller ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39062665/

相关文章:

ios - 如何正确禁用 UIPickerView 组件滚动?

iphone - 实现自定义 NSMutableArray

swift - 在 Swift 中将数组转换为特定类型

ios - 在 Swift 3/iOS10 中使用带有自定义字体的动态类型的更好方法

ios导航栏右键项目在推送新 View Controller 时移动

ios - 创建具有后退按钮样式的 UIBarButtonItem

iOS - 如何找到与给定 CGRect 具有相同高度的正确字体大小(以磅为单位)?

ios - 手动添加框架 - 使用 swift 4.0 编译的模块无法在 Swift 4.0.3 中导入

ios - NavigationBar 外观()(色调颜色..)

ios - Monotouch 内存 View Controller 问题