【问题标题】:Swift iOS Dynamic Tab bar from json response来自json响应的Swift iOS动态标签栏
【发布时间】:2020-05-08 00:51:32
【问题描述】:

我是 iOS/Swift 的新手。我的应用程序正在使用 json 数据,我必须使用 json 响应创建标签栏。我的意思是,我从 json 获得 Array of Title 并且我必须基于该数组创建标签栏项目。数组数据/计数可能会发生变化,应用程序应相应地显示标签栏。我正在尝试在没有情节提要的情况下以编程方式创建标签栏(因为这是巨大的标签栏)

到目前为止,我已经尝试了以下代码 -

func tabBarCustom() {

    let tt = UITabBarController()

    var array1 = [UIViewController]()
    var controller1 = UIViewController()


    for i in 0..<navgTitle.count {

        controller1 = UIViewController(nibName: "WeatherViewController", bundle: nil)

        controller1.title = navgTitle[i]

    controller1.tabBarItem = UITabBarItem(title: navgTitle[i], image: .none, tag: 1)

        array1.append(controller1)



    }

    print(array1)

    tt.viewControllers = array1

    self.view.addSubview(tt.view)

}

上面的代码失败了 - 无法在包中加载 NIB:'NSBundle' 名称为 'WeatherViewController' 我不确定如何使用标题数组自动创建多个视图控制器,将标题作为视图控制器的名称。这可能吗?以及如何在数组中循环为每个标签栏项创建视图控制器

请帮忙。谢谢

【问题讨论】:

    标签: swift uiviewcontroller tabbar


    【解决方案1】:

    你在用笔尖吗?如果是这样,您的项目找不到 nib 文件,您应该检查一下:Could not load NIB in bundle: 'NSBundle'。或者你正在使用情节提要?如果您尝试从情节提要中初始化,您将执行以下操作:

    let vc = sb.instantiateViewController(withIdentifier: "WeatherViewController")
    

    (请务必添加 WeatherViewController 作为视图控制器的标识符)。

    或者你在使用代码吗?如果您尝试从代码创建视图控制器,您只需执行 WeatherViewController()。

    至于标签栏,你的方向是正确的,只是创建视图控制器失败了。

    【讨论】:

    • 谢谢卡罗琳...我没有使用故事板并尝试使用 Wea​​therViewController(),它正在工作。但是,我仍然对两个问题感到困惑 - 1. 我应该为每个选项卡创建视图控制器吗?我的意思是在“for”循环中,我应该如何为每个选项卡创建视图控制器?或者如何在“WeatherViewController()”中分别处理每个选项卡? 2.标签栏中的“更多”按钮不起作用,您能告诉我应该是什么问题吗?希望您能帮我解答,非常感谢您的宝贵时间..
    • 是的,您需要为标签栏上的每个项目创建一个单独的视图控制器。您不一定需要在循环中执行此操作,更常见的是:let mainVC = WeatherViewController() let profileVC = ProfileViewController() let tabBarController = UITabBarController() tabBarController.viewControllers = [mainVC, profileVC] 。我会在这里查看这个链接:learnappmaking.com/…。我不确定您对“更多”按钮的意思。如果我已经回答了您最初的问题,您可以将其标记为已回答吗?
    • 由于我需要动态地执行视图控制器,有没有办法以编程方式创建它们?如果我遵循您提到的相同过程,我需要手动创建 vc,但我的 API 总是更改数据并且它们每次都不相同。这就是为什么我问我是否可以动态地做到这一点(使用 API 中的“标题”数据)。你能告诉我这是否可能吗?谢谢
    • 是的,当您从 API 接收数据时,您只需使用所需的动态控制器创建或更新标签栏。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-01-04
    • 2018-08-05
    • 2019-04-25
    • 1970-01-01
    • 2018-02-07
    • 2020-06-23
    相关资源
    最近更新 更多