如何禁用选项卡栏项目的选择-Swift

时间:2018-09-05 09:51:19

标签: ios swift uitabbarcontroller

我有一个在UITabBarcontroller中嵌入两个UIViewcontroller的应用程序。当我使用UIViewController-1时,我想按下一个按钮,以禁用选项卡栏的所有项目选择。我的努力在下面,但是我不确定如何完成代码...

enter image description here

当我在“文件夹” 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
  }
 ...
 }

3 个答案:

答案 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}