在swift

时间:2016-12-06 11:46:04

标签: ios swift swift3 uitabbaritem

我需要提供建议:我有几个JSON,其中可能有几种类型的运输(例如,只有火车(第一个变种)或火车和公共汽车(第二个变种)。我知道只有3种类型的运输最大。

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

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

2 个答案:

答案 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类。

enter image description here