简体   繁体   中英

Remove TabBar item in Swift

I currently try to find a way to remove while run the app a TabBar Item, i found a way to enable or disable it but not to complete remove it.

For disable it i do:

在此输入图像描述

In ViewDidLoad

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

This works well but still the user can see the TabBar item and i ll simply complete remove it, is there a way?

I want to trigger the TabBarItem via Parse, if i set the Parse Data to true it should show other way it should not.

You want to set the viewControllers property of your tabBarController with an array where you excluded the particular viewController that you don't want to have anymore.

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

For those who just want to disable one item. Use this code from @Daniele's solution. and place it in your UITabBarController class

viewDidLoad() {

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

}

Swift 5: For removing only one index in Tab Bar Controller(you can use this method in viewDidLoad and viewDidAppear both of them)

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

if you have 4 index in Tab Bar and you want to remove the last 2 index

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

first line will remove the index 3rd one and you will remaining 3 from 4 and again when you remove the 2nd index it will remove again 3rd index and then you will have remain 2 index in last.

Swift 4.1 For removing More items Use Array

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

the point in the array is You Should Use Descending Order of indexes to remove to get the desired Result.

better way is to use only text instead of image. choose 'space' as the text then disable that. then the user will not be able to see it. i haven't tested it but I sure it will work.

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM