【问题标题】:How to dynamically populate Tab Bar controller's tab bars.? (in swift -- iOS 9)如何动态填充标签栏控制器的标签栏。? (迅速——iOS 9)
【发布时间】:2016-06-25 01:01:05
【问题描述】:

我正在开发一个入口点是登录屏幕的 iOS 应用程序。 然后在登录后,转到标签栏控制器。 现在我想根据用户登录的级别动态填充标签栏项目的数量和内容。

例如->

1 级登录 - 标签栏项目

  • 选项 A
  • 选项 B
  • 选项 C
  • 选项 D

2 级登录 - 标签栏项目

  • 选项 C
  • 选项 D

如何将标签栏控制器动态绑定到某些数据,以创建这种 od 视图?

【问题讨论】:

    标签: ios swift tabs swift2 uitabbarcontroller


    【解决方案1】:

    我建议使用以下架构:

    每当用户以 1 级访问权限登录时 - 您需要在 NSUserDefaults 中保存该用户的 level1 值。

    每当用户以 2 级访问权限登录时 - 您需要在 NSUserDefaults 中保存该用户的 level2 值。

    之后,当你对标签控制器执行 segue 时,你需要检查 NSUserDefaults 中存储了哪个值并显示适当的标签。

    如果用户注销,请不要忘记删除值。

    另外,我确信有更好的方法来做到这一点,但这是我想到的第一个。干杯。

    【讨论】:

    • 我找不到从 tabBarController 隐藏特定选项卡的方法。你能帮忙吗?我刚开始 Swift 和 iOS 开发..
    【解决方案2】:

    Swift 4 - Xcode 9


    您可以使用以下方法动态更改 tabBarController 在运行时使用的 UIViewController 数组:

    self.viewControllers = arrayOfUIViewControllers
    

    在您的特定情况下,有 2 个 UIViewController 数组可用,并且当 tabBarController 加载时(大概在登录后),根据登录数据显示一个级别 1 的数组或显示另一个级别 2 的数组。


    为了解决一个更广泛的问题,演示另一个用户可以在运行时动态生成和删除选项卡的案例也可能会有所帮助。

    1. 在故事板中,我有一个标签栏控制器连接到一个视图控制器。
    2. View Controller 的 Storyboard ID 为“NewTab”,是“ViewController”的子类,它还有两个 UIButton“Add”和“Remove”,并且 Tab Bar Item Title 设置为“1”
    3. 标签名称将来自 Tabs.swift,这是我存储标签数据的 CoreData 占位符。

      class Tabs: NSObject {
          let tabs: [String] = ["1", "2", "3", "4", "5", "6", "7", "8", "9"]
      }
      
    4. ViewController.swift 几乎可以做所有事情。

      import UIKit
      class ViewController: UIViewController {
          let tabs = Tabs().tabs
          var array: [UIViewController] = []
          @IBAction func makeNewTab(_ sender: Any) {
              let newViewController: UIViewController = UIStoryboard(name: "Main", bundle: nil).instantiateViewController(withIdentifier: "NewTab") as UIViewController
              array = (self.tabBarController?.viewControllers)!
              if array.count < tabs.count {
                  newViewController.title = tabs[array.count]
                  array.append(newViewController)
                  self.tabBarController?.setViewControllers(array, animated: true)
              }
          }
          @IBAction func removeTab(_ sender: Any) {
              array = (self.tabBarController?.viewControllers)!
              if array.count > 1 {
                  let index = array.index(of: self)
                  array.remove(at: index!)
                  self.tabBarController?.setViewControllers(array, animated: true)
              }
          }
      }
      

      因此,您在此处实例化选项卡名称列表和一个空的 ViewControlers 数组。 @IBAction makeNewTab 链接到 Add 按钮,@IBAction removeTab 链接到情节提要的 Remove 按钮。如果选项卡少于 2 个或选项卡名称已用完,这些按钮将不起作用。

    我选择在我的答案中包含这个示例,因为我一直在寻找它并最终将它放在一起,所以也许其他人会发现它很有用,因为它与广泛的问题标题有关。

    【讨论】:

      猜你喜欢
      • 2021-08-09
      • 2017-10-13
      • 1970-01-01
      • 2018-02-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-07-29
      相关资源
      最近更新 更多