我需要提供建议:我有几个JSON,其中可能有几种类型的运输(例如,只有火车(第一个变种)或火车和公共汽车(第二个变种)。我知道只有3种类型的运输最大。
所以,我想在第一个视图控制器中显示JSON关于火车的信息,在第二个视图中显示JSON关于公共汽车的信息等。
如何做得更好:创建多个视图控制器(最大变种 - 3),几个tabBar.items(3),当我从AppDelegate的JSON获取数据时,我会知道:"好的,我知道在关于火车的JSON信息我应该只显示tabBar.item =" train"并且只能使用TrainViewController和其他tabBar.items我必须向用户隐藏?这是好经历吗?
答案 0 :(得分: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上有很多教程。希望这会有所帮助,并指出你正确的方向。祝你好运!
答案 1 :(得分:2)
您的问题将有多种解决方案来实现您的目标,完全取决于哪种用户界面会吸引您的用户。但除了用户界面,我还建议您考虑应用程序大小和代码复杂性。
如果我必须这样做,我会这样做:
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
类。