我正在开发一个iOS应用程序,其入口点是登录屏幕。 然后在登录后,转到标签栏控制器。 现在,我想根据用户登录的级别动态填充标签栏项目的数量和内容。
例如 - >
1级登录 - 标签栏项目
2级登录 - 标签栏项目
如何将标签栏控制器动态绑定到某些数据,以创建此类视图。?
答案 0 :(得分:1)
我建议遵循架构:
每当用户登录1级访问权限时 - 您需要在NSUserDefaults中为该用户保存level1值。
每当用户登录2级访问权限时 - 您需要在NSUserDefaults中为此用户保存level2值。
之后,当您执行segue到标签控制器时,您需要检查NSUserDefaults中存储的值并显示相应的标签。
如果用户退出,请不要忘记删除值。
另外,我确信有更好的方法可以做到这一点,但这是我想到的第一个。欢呼声。
答案 1 :(得分:1)
Swift 4 - Xcode 9
您可以使用以下命令在运行时动态更改tabBarController使用的UIViewControllers数组:
self.viewControllers = arrayOfUIViewControllers
在您的特定情况下,有2个UIViewControllers数组可用,当tabBarController加载时(大概是在登录后),提供1级数组或根据登录数据显示2级数据。
为了解决更广泛的问题,展示用户可以在运行时动态生成和删除标签的另一种情况也可能会有所帮助。
选项卡名称将来自Tabs.swift,它是我存放标签数据的CoreData的占位符。
class Tabs: NSObject {
let tabs: [String] = ["1", "2", "3", "4", "5", "6", "7", "8", "9"]
}
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链接到storyboard Remove按钮。如果标签少于2个,或者标签名称用完,按钮将无法使用。
我已经选择在我的回答中包含这个例子,因为我一直在寻找它并最终把它放在一起,所以也许其他人会觉得它很有用,因为它与广泛的问题标题有关。