快速生成 tabBar.items 的需求计数

Posted

技术标签:

【中文标题】快速生成 tabBar.items 的需求计数【英文标题】:Generate need counts of tabBar.items in swift 【发布时间】:2016-12-06 11:46:03 【问题描述】:

我需要以下情况的建议:我有几个 JSON,其中可能有几种运输方式(例如,只有火车(第一种变体)或火车和公共汽车(第二种变体)。我知道只有 3 种运输方式最大。

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

如何更好地做:创建几个视图控制器(最大变体 - 3),几个 tabBar.items (3),当我从 AppDelegate 中的 JSON 获取数据时,我会知道:“好的,我知道那个 JSON 信息只关于火车,我应该只显示 tabBar.item = "train" 并且只使用 TrainViewController 和其他 tabBar.items 我必须对用户隐藏?这是很好的体验吗?

【问题讨论】:

【参考方案1】:

您的问题将有多种解决方案来实现您的目标,这完全取决于什么样的用户界面会吸引您的用户。但除了 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.

这不是确切或唯一的解决方案,但 IMO 这将减少应用程序的大小,因为您将使用单个 ViewController 而不是三个,您可以轻松管理所有复杂性ViewController 班级。

【讨论】:

谢谢,但如果是这样的话,当我得到只有一种类型的 JSON 时,完全隐藏分段控件是个好主意吗? 不,隐藏分段控件不好。在这种情况下,您只需将变体的类型传递给第二个 VC 并加载所需的数据。您的最终目标应该是根据变体类型加载和显示数据。您仍然可以使用单个视图控制器来管理它。 是的,我选择了你的变体,我的想法真的很棒,太棒了! 很高兴帮助您@VadimNikolaev。如果我的回答解决了您的问题,您可以将其标记为正确。快乐编码..!!【参考方案2】:

我会以编程方式处理您的标签栏。我将创建一个新的 Cocoa Touch 类,将其称为 CustomTabBarController 并将其子类化为 UITabBarController。转到您的 App Delegate 文件并在 didFinishLaunchingWithOptions 函数中添加以下内容:

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

现在,当您的应用启动时,您的 rootViewController 将成为此标签栏视图。现在在 CustomTabBarController 类的 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 的教程很多。希望这对您有所帮助并为您指明正确的方向。祝你好运!

【讨论】:

以上是关于快速生成 tabBar.items 的需求计数的主要内容,如果未能解决你的问题,请参考以下文章

bzoj1494 生成树计数 (dp+矩阵快速幂)

如何快速生成视觉需求?

走进开发系列,5分钟熟悉快速排序和计数排序

C#快速生成数据数组

实验 快速生成树配置

快速生成树