我正在开发一个iOS应用程序,它的入口点是一个登录屏幕。登录后,它会转到一个选项卡栏控制器。现在我想根据用户登录的级别动态填充选项卡栏项目的数量和内容。例如-〉第1级登录-选项卡栏项目
2级登录-选项卡栏项目
我如何动态绑定一个标签栏控制器到一些数据,以创建这种类型的视图?
xn1cxnb41#
我建议采用以下模式:每当使用者以层级1存取权登入时,您必须将此使用者的层级1值储存在NSUserDefaults中。每当使用者以层级2存取权登入时-您必须将此使用者的层级2值储存在NSUserDefaults中。之后,当您执行到选项卡控制器的segue时,您需要检查NSUserDefaults中存储的值并显示相应的选项卡。如果用户注销,请不要忘记删除值。当然,我相信还有更好的方法,但这是我第一个想到的。干杯。
hk8txs482#
斯威夫特4 - Xcode 9您可以使用以下命令在运行时动态更改tabBarController使用的UIViewController数组:
self.viewControllers = arrayOfUIViewControllers
在您的特定情况下,有2个可用的UIViewController数组,当加载tabBarController时(大概在登录后),根据登录数据为级别1提供一个数组,或为级别2提供另一个数组。为了解决一个更广泛的问题,演示另一个用户可以在运行时动态生成和删除选项卡的情况可能也很有帮助。1.在故事板中,我有一个连接到视图控制器的选项卡栏控制器。1.视图控制器具有情节提要ID“NewTab”,是“ViewController”的子类,它还具有两个UI按钮“Add”和“Remove”,并且选项卡栏项目标题设置为“1”1.选项卡名称将来自Tabs.swift,它是我存储选项卡数据的CoreData的占位符。
class Tabs: NSObject { let tabs: [String] = ["1", "2", "3", "4", "5", "6", "7", "8", "9"] }
1.视图控制器。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个或者选项卡名称已用完,则这些按钮将不起作用。我选择在我的答案中包括这个例子,因为我一直在寻找它,并最终把一个在一起,所以也许其他人会发现它有用,因为它是相关的广泛的问题标题。
2条答案
按热度按时间xn1cxnb41#
我建议采用以下模式:
每当使用者以层级1存取权登入时,您必须将此使用者的层级1值储存在NSUserDefaults中。
每当使用者以层级2存取权登入时-您必须将此使用者的层级2值储存在NSUserDefaults中。
之后,当您执行到选项卡控制器的segue时,您需要检查NSUserDefaults中存储的值并显示相应的选项卡。
如果用户注销,请不要忘记删除值。
当然,我相信还有更好的方法,但这是我第一个想到的。干杯。
hk8txs482#
斯威夫特4 - Xcode 9
您可以使用以下命令在运行时动态更改tabBarController使用的UIViewController数组:
在您的特定情况下,有2个可用的UIViewController数组,当加载tabBarController时(大概在登录后),根据登录数据为级别1提供一个数组,或为级别2提供另一个数组。
为了解决一个更广泛的问题,演示另一个用户可以在运行时动态生成和删除选项卡的情况可能也很有帮助。
1.在故事板中,我有一个连接到视图控制器的选项卡栏控制器。
1.视图控制器具有情节提要ID“NewTab”,是“ViewController”的子类,它还具有两个UI按钮“Add”和“Remove”,并且选项卡栏项目标题设置为“1”
1.选项卡名称将来自Tabs.swift,它是我存储选项卡数据的CoreData的占位符。
1.视图控制器。swift几乎可以做所有事情。
因此,在这里您示例化了选项卡名称列表和一个ViewControlers空数组。@IBAction makeNewTab链接到Add按钮,而@IBAction removeTab链接到故事板Remove按钮。如果选项卡少于2个或者选项卡名称已用完,则这些按钮将不起作用。
我选择在我的答案中包括这个例子,因为我一直在寻找它,并最终把一个在一起,所以也许其他人会发现它有用,因为它是相关的广泛的问题标题。