由于您使用的是基于故事板的应用程序,我假设您有UITabBarController
在故事板中定义为根控制器。顺便说一句,您还可以通过标识符检索它,而不是从窗口走到根视图控制器。
限制哪些选项卡可选,是通过设置 UITabBarController 的委托来实现的(即符合UITabBarControllerDelegate
).
在委托中,您可以实现这两个方法:
– tabBarController:shouldSelectViewController:
– tabBarController:didSelectViewController:
可能,您只需要第一个限制(禁止)选择,直到您的工作流程准备就绪。
另一种方法是在每次通过里程碑时在选项卡栏控制器上设置“viewControllers”属性。在每个里程碑中,您可以在该属性中设置更广泛的视图控制器数组,这将打开附加视图控制器的选择选项卡项目。
SWIFT 3
(为了便于理解而进行了扩展)
let arrayOfTabBarItems = tabBarController?.tabBar.items
if let barItems = arrayOfTabBarItems, barItems.count > 0 {
os_log("barItems.count is now ", barItems.count)
tabBarItem0 = barItems[0]
tabBarItem0.isEnabled = true
tabBarItem1 = barItems[1]
tabBarItem1.isEnabled = true
tabBarItem2 = barItems[2]
tabBarItem2.isEnabled = true
tabBarItem3 = barItems[3]
tabBarItem3.isEnabled = true
tabBarItem4 = barItems[4]
tabBarItem4.isEnabled = true
}
这可以在每个选项卡控制器上的 viewWillAppear 中使用。根据此检查您的规则并相应地限制每个选项卡。
(更简洁的方法)
let arrayOfAllTabBarItems = tabBarController?.viewControllers
if let tabBarArray = arrayOfAllTabBarItems, tabBarArray.count > 0 {
for x in 0...tabBarArray.count-1 {
let tabBarItem = tabBarArray[x]
if tabBarItem.title != nil {
if tabBarItem.title == "Tab1" || tabBarItem.title == "MyTab" || tabBarItem.title == "Tab2Check" {
tabBarItem.tabBarItem.isEnabled = !(isMyRuleTrue!)
}
}
}
}