禁用选项卡栏项目 - Swift

8

我该如何禁用特定的选项卡项?比如第三个图标...

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

一行代码就能完成这么简单的任务吗?上面的代码并不可行...


1
你尝试过这样的代码吗:self.tabBarItem.items![2] .setEnabled(true,forSegmentAtIndex:2); - BHendricks
9个回答

16

这里是答案

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

1
必须对其进行一些修改以适用于Swift 3:if let arrayOfTabBarItems = tabBarController?.tabBar.items as AnyObject as? NSArray, let tabBarItem = arrayOfTabBarItems[2] as? UITabBarItem { tabBarItem.isEnabled = true } - jammyman34

10

这是我用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变量,然后你就可以开始了!


9

如果有人想知道如何禁用所有选项卡栏项目

if let items = tabBarController?.tabBar.items {
        items.forEach { $0.isEnabled = false }
}

5

SWIFT 4.2

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

4

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

类定义中,为您的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

}

3

Swift 5

您可以使用以下代码启用或禁用单个选项卡按钮。

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

2
我创建了一个扩展程序,基于“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
                }
            }
        }
    }
}

这非常棒。 - jamryu

2

以下是一行代码:

在Objective C中,该行代码可以在viewDidLoad:方法中使用。

在Swift中,该行代码无法在viewDidLoad()方法中使用,但可以在viewWillAppear()方法中使用。


1

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

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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接