Swift 禁用带有功能的标签栏项目
Swift disable tab bar item with function
我的标签栏中有一个项目在满足特定条件之前不应启用。我可以从我的子类 UITabBarController
中禁用 viewDidLoad()
中的那个项目,但是我在创建一个我可以在需要时调用的函数时遇到了问题。以下是我到目前为止所拥有的 - 由于我不明白的原因,我的标签栏项目数组始终为零! (除非它在 viewDidLoad()
中初始化,它工作正常。)
func setTabState(whichTab: Int) {
let arrayOfTabBarItems = self.tabBar.items
if let barItems = arrayOfTabBarItems {
if barItems.count > 0 {
let tabBarItem = barItems[whichTab]
tabBarItem.isEnabled = !tabBarItem.isEnabled
}
}
}
请在您想要在 UITabbarController class
中禁用 tabbar 项目的地方输入以下代码
//Here Disable 0 Tabbar item
DispatchQueue.main.async {
let items = self.tabBar.items!
if items.count > 0 {
items[0].isEnabled = false
}
}
结果证明该解决方案结合了 Rohit Makwana 的回答和一些实验:
- 在我的 CustomTabBarViewController 的
viewDidLoad()
中,我使用了 Rohit 的
answer 设置标签栏项目的初始状态。我仍然不明白为什么必须使用 DispatchQueue
,但一次只能做一件事。
- 在单独的视图控制器中,我采用了
UITabBarControllerDelegate
协议并设置了
tabBar?.delegate = self
.
- 最后,我在一个变量上创建了一个 属性 观察器,当满足某些条件时该变量会设置为 true:
var allButtonsPressed = false {
didSet {
if let items = tabBarController?.tabBar.items {
items[1].isEnabled = allButtonsPressed
}
}
}
而且有效!当 allButtonsPressed 为真时,选项卡栏项目立即启用。当它为假时 - 禁用。再加上 Rohit 帮助我找到解决方案。现在,开始了解有关 DispatchQueue 的更多信息...
我的标签栏中有一个项目在满足特定条件之前不应启用。我可以从我的子类 UITabBarController
中禁用 viewDidLoad()
中的那个项目,但是我在创建一个我可以在需要时调用的函数时遇到了问题。以下是我到目前为止所拥有的 - 由于我不明白的原因,我的标签栏项目数组始终为零! (除非它在 viewDidLoad()
中初始化,它工作正常。)
func setTabState(whichTab: Int) {
let arrayOfTabBarItems = self.tabBar.items
if let barItems = arrayOfTabBarItems {
if barItems.count > 0 {
let tabBarItem = barItems[whichTab]
tabBarItem.isEnabled = !tabBarItem.isEnabled
}
}
}
请在您想要在 UITabbarController class
中禁用 tabbar 项目的地方输入以下代码//Here Disable 0 Tabbar item
DispatchQueue.main.async {
let items = self.tabBar.items!
if items.count > 0 {
items[0].isEnabled = false
}
}
结果证明该解决方案结合了 Rohit Makwana 的回答和一些实验:
- 在我的 CustomTabBarViewController 的
viewDidLoad()
中,我使用了 Rohit 的
answer 设置标签栏项目的初始状态。我仍然不明白为什么必须使用DispatchQueue
,但一次只能做一件事。 - 在单独的视图控制器中,我采用了
UITabBarControllerDelegate
协议并设置了
tabBar?.delegate = self
. - 最后,我在一个变量上创建了一个 属性 观察器,当满足某些条件时该变量会设置为 true:
var allButtonsPressed = false {
didSet {
if let items = tabBarController?.tabBar.items {
items[1].isEnabled = allButtonsPressed
}
}
}
而且有效!当 allButtonsPressed 为真时,选项卡栏项目立即启用。当它为假时 - 禁用。再加上 Rohit 帮助我找到解决方案。现在,开始了解有关 DispatchQueue 的更多信息...