在 swift 中生成 tabBar.items 的需求计数

Generate need counts of tabBar.items in swift

我需要以下情况的建议:我有几个 JSON 其中可能有几种类型的交通工具(例如,只有火车(第一种变体)或火车和公共汽车(第二种变体))。我知道有最多只有3种交通工具。

所以,我想在第一个视图控制器中显示来自 JSON 的有关火车的信息,来自 JSON 的有关第二端巴士的信息等。

怎么做更好:创建几个视图控制器(最大变体 - 3),几个 tabBar.items (3),当我在 AppDelegate 中从 JSON 获取数据时,我会知道:"OK, I know that in that JSON info only about train and I should show only tabBar.item = "train" 并且只与 TrainViewController 和其他人一起工作 tabBar.items 我必须对用户隐藏?这是很好的体验吗?

我会以编程方式处理您的标签栏。我会创建一个新的 Cocoa Touch Class,将其称为 CustomTabBarController 之类的名称,并将其作为 UITabBarController 进行子class。继续你的 App Delegate 文件,在你的 didFinishLaunchingWithOptions 函数中,添加以下内容:

window = UIWindow(frame: UIScreen.main.bounds)
        window?.makeKeyAndVisible()
        window?.rootViewController = CustomTabBarController()

现在,当您的应用程序启动时,您的 rootViewController 将是这个标签栏视图。现在在 CustomTabBarController class 的 viewDidLoad 中,您可以简单地在一个数组中实现 viewControllers,您的标签栏将显示并在触摸时转到:

let trainController = UIViewController()
        let trainNavigationController = UINavigationController(rootViewController: trainController)
        trainNavigationController.tabBarItem.image = UIImage(named: "your_tab_icon")?.withRenderingMode(.alwaysOriginal)
        trainNavigationController.tabBarItem.selectedImage = UIImage(named: "your_tab_selected_icon")?.withRenderingMode(.alwaysOriginal)

let busController = UIViewController()
    let busNavigationController = UINavigationController(rootViewController: trainController)
    busNavigationController.tabBarItem.image = UIImage(named: "your_tab_icon")?.withRenderingMode(.alwaysOriginal)
    busNavigationController.tabBarItem.selectedImage = UIImage(named: "your_tab_selected_icon")?.withRenderingMode(.alwaysOriginal)

viewControllers = [trainNavigationController, busNavigationController]

至于 JSON 部分,那是完全不同的球赛。网上和 SO 上有很多教程。希望这对您有所帮助并为您指明正确的方向。祝你好运!

您的问题将有 多种解决方案 来实现您的目标,完全取决于哪种 UI 会吸引您的用户。但是除了 UI,我还会建议您考虑 应用程序大小和代码复杂性

如果我必须这样做,我会这样做:

1) Use single `ViewControlller` with `SegementedControl` on top having titles of your variants.

2) Whenever user selects the `segment`,load necessary data for that variant.

3) If you are going to show that data in list format, then It would be very easy to manage your `datasource` as you can simply replace the datasource depending on the selected variant.

这不是确切或唯一的解决方案,但我认为这会减小应用程序的大小,因为您将使用单个 ViewController 而不是三个,并且您可以轻松地在一个 ViewController class.

中管理所有的复杂性