删除 Swift 中的 TabBar 项目

Remove TabBar item in Swift

我目前正在尝试找到一种方法来删除 运行 该应用程序是一个 TabBar 项目,我找到了一种方法来启用或禁用它,但没有完全删除它。

为了禁用它,我这样做:

在 ViewDidLoad 中

if let tabBarItem = self.tabBarController?.tabBar.items?[3] as? UITabBarItem {
            tabBarItem.enabled = false
}

这很好用,但用户仍然可以看到 TabBar 项目,我会简单地完全删除它,有什么办法吗?

我想通过 Parse 触发 TabBarItem,如果我将 Parse Data 设置为 true,它应该以其他方式显示它不应该。

您想用一个数组设置 tabBarControllerviewControllers 属性,在该数组中排除了您不想再拥有的特定 viewController。

if let tabBarController = self.tabBarController {
    let indexToRemove = 3
    if indexToRemove < tabBarController.viewControllers?.count {
        var viewControllers = tabBarController.viewControllers
        viewControllers?.remove(at: indexToRemove)
        tabBarController.viewControllers = viewControllers
    }
}

更好的方法是只使用文本而不是图像。选择 'space' 作为文本然后禁用它。那么用户将无法看到它。我还没有测试过,但我相信它会起作用。

对于只想禁用一项的用户。使用@Daniele 解决方案中的代码。并将其放入您的 UITabBarController class

viewDidLoad() {

let index = 0 //0 to 5
viewControllers?.remove(at: index)

}

Swift 5: Tab Bar Controller 只移除一个索引(viewDidLoad 和viewDidAppear 都可以使用此方法)

override func viewDidAppear(_ animated: Bool) {
    
}
override func viewDidLoad() {
    super.viewDidLoad()

}

tabBarController.viewControllers?.remove(at:0)  // for 0 index
tabBarController.viewControllers?.remove(at:1)  // for 1 index
tabBarController.viewControllers?.remove(at:2)  // for 2 index

如果您在标签栏中有 4 个索引并且您想删除最后 2 个索引

tabBarController.viewControllers?.remove(at:2)
tabBarController.viewControllers?.remove(at:2)

第一行将删除第 3 个索引,您将从 4 中保留 3 个,当您删除第 2 个索引时,它将再次删除第 3 个索引,然后您将在最后保留 2 个索引。

另一种方式

//MARK: - Function Call
removeTab(at: 4)

//MARK: - Method
func removeTab(at index: Int) {
    if self.viewControllers?.count ?? 0 >= index {
        self.viewControllers?.remove(at: index)
    }
}

Swift 4.1 要删除更多项目,请使用数组

let index = [2,0]
index.forEach{viewControllers?.remove(at: [=10=])}

数组中的点是您应该使用索引的降序删除以获得所需的结果。