我有一个在UITabBarcontroller中嵌入两个UIViewcontroller的应用程序。当我使用UIViewController-1时,我想按下一个按钮,以禁用选项卡栏的所有项目选择。我的努力在下面,但是我不确定如何完成代码...
当我在“文件夹” UIViewController中时,我想禁用任何选项卡栏项的选择:
class Folders: UIViewController, UITableViewDataSource, UITableViewDelegate{
...
// DISABLE TAB BAR ITEMS
func disable (){
let tabBarItemsArray = self.tabBarController?.tabBar.items
tabBarItemsArray[0].enabled = false // THIS BIT OF CODE IS NOT RECOGNIZED BY XCODE
}
...
}
答案 0 :(得分:2)
tabBarItemsArray
是可选的,其类型为[UITabBarItem]?
。
您最初可以强制解开包装:tabBarItemsArray![0]
,但是正确的方法是使用if let
构造:
if let tabBarItemsArray = tabBarController.tabBar.items {
tabBarItemsArray[0].isEnabled = false
}
或:
guard let tabBarItemsArray = tabBarController.tabBar.items else {
fatalError("Error")
}
let item = tabBarItemsArray[0]
item.isEnabled = false
答案 1 :(得分:0)
您可以使用单行代码来实现。请检查以下代码。
您可以从任何控制器执行此操作。
self.navigationController?.tabBarController?.tabBar.items![0].isEnabled = false
您可以定义要实现的NotificationCenter观察器。请检查以下代码。 *在TabBar控制器文件中。
override func viewDidLoad() {
super.viewDidLoad()
// Do any additional setup after loading the view.
NotificationCenter.default.addObserver(self, selector: #selector(disableTab(notification:)), name: Notification.Name("disableTab"), object: nil)
}
@objc func disableTab(notification: Notification) {
self.TabBarItem.isEnabled = false
}
从任何地方射击,如下所示...
NotificationCenter.default.post(name: Notification.Name("disableTab"), object: nil)
答案 2 :(得分:0)
如果您想一次禁用一个选项卡项,则可以禁用第一个选项卡:
guard let tabbars = self.tabBar.items else {
return
}
tabbars[0].isEnabled = false
但是如果您希望一次禁用所有功能,则可以执行以下操作:
self.tabBar.items?.map{$0.isEnabled = false}