删除 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,它应该以其他方式显示它不应该。
您想用一个数组设置 tabBarController
的 viewControllers
属性,在该数组中排除了您不想再拥有的特定 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=])}
数组中的点是您应该使用索引的降序删除以获得所需的结果。
我目前正在尝试找到一种方法来删除 运行 该应用程序是一个 TabBar 项目,我找到了一种方法来启用或禁用它,但没有完全删除它。
为了禁用它,我这样做:
在 ViewDidLoad 中
if let tabBarItem = self.tabBarController?.tabBar.items?[3] as? UITabBarItem {
tabBarItem.enabled = false
}
这很好用,但用户仍然可以看到 TabBar 项目,我会简单地完全删除它,有什么办法吗?
我想通过 Parse 触发 TabBarItem,如果我将 Parse Data 设置为 true,它应该以其他方式显示它不应该。
您想用一个数组设置 tabBarController
的 viewControllers
属性,在该数组中排除了您不想再拥有的特定 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=])}
数组中的点是您应该使用索引的降序删除以获得所需的结果。