快速生成 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 的需求计数的主要内容,如果未能解决你的问题,请参考以下文章