禁用标签栏项目 - Swift

Disable tabbar item - Swift

如何禁用特定的标签栏项目?类似于第三个图标...

self.tabBarItem.items![2].enabled = false

必须有一种方法可以完成像一个班轮这样简单的任务吗? 以上都不行...

答案在这里

if  let arrayOfTabBarItems = tabBarViewController.tabBar.items as! AnyObject as? NSArray,tabBarItem = arrayOfTabBarItems[2] as? UITabBarItem {
        tabBarItem.enabled = false
    }

要在单个视图上禁用 tabBarItem(并在视图更改时重新启用它):

Class 定义 中,为您的 UITabBarItems 创建占位符 Class 变量:

var tabBarItemONE: UITabBarItem = UITabBarItem()
var tabBarItemTWO: UITabBarItem = UITabBarItem()
etc...

然后,在 viewWillAppear 中,根据需要禁用项目:

let tabBarControllerItems = self.tabBarController?.tabBar.items

if let arrayOfTabBarItems = tabBarControllerItems as! AnyObject as? NSArray{

    tabBarItemONE = arrayOfTabBarItems[0] as! UITabBarItem
    tabBarItemONE.enabled = false

    tabBarItemTWO = arrayOfTabBarItems[1] as! UITabBarItem
    tabBarItemTWO.enabled = false

}

viewWillDisappear 中,重新启用项目:

override func viewWillDisappear(animated: Bool) {

    tabBarItemONE.enabled = true
    tabBarItemTWO.enabled = true

}

这是我执行相同操作的代码,使用 Swift 3:

    let tabBarControllerItems = self.tabBarController?.tabBar.items

    if let tabArray = tabBarControllerItems {
        tabBarItem1 = tabArray[0]
        tabBarItem2 = tabArray[1]

        tabBarItem1.isEnabled = false
        tabBarItem2.isEnabled = false    
    }

只需将上面的代码块放入初学者的 viewDidLoad() 方法中,不要忘记创建 tabBarItem 变量,一切顺利!

这是单行本:

在 Objective C 中,该行代码在 viewDidLoad: 中有效。

在 Swift 中,它在 viewDidLoad() 中不起作用,但在 viewWillAppear() 中起作用。

我为此创建了一个扩展,"Aditya Koukuntla" 答案的基础:

 extension UIViewController {

    func enableTabbarItems(_ items: [Int]) {
        disableAllTabbarItems()
        if let arrayOfTabBarItems = tabBarController?.tabBar.items as NSArray? {
            for i in 0..<arrayOfTabBarItems.count {
                if items.contains(i) {
                    if let tabBarItem = arrayOfTabBarItems[i] as? UITabBarItem {
                        tabBarItem.isEnabled = true
                    }
                }
            }
        }
    }

    private func disableAllTabbarItems() {
        if let arrayOfTabBarItems = tabBarController?.tabBar.items as NSArray? {
            for i in 0..<arrayOfTabBarItems.count {
                if let tabBarItem = arrayOfTabBarItems[i] as? UITabBarItem {
                    tabBarItem.isEnabled = false
                }
            }
        }
    }
}

SWIFT 4.2

if let arrayOfTabBarItems = self.tabBar.items as AnyObject as? NSArray,let 
   tabBarItem = arrayOfTabBarItems[1] as? UITabBarItem {
   tabBarItem.isEnabled = false
}

万一有人正在寻找如何禁用所有标签栏项目:

if let items = tabBarController?.tabBar.items {
        items.forEach { [=10=].isEnabled = false }
}

有一种更简单的方法,只需一行代码:

self.tabBarController?.tabBar.items?[2].isEnabled=false

Swift 5

您可以使用此代码启用或禁用单个标签栏按钮。

var controller = YourViewController()
controller.tabBarItem.isEnabled = false