Fabian Boulegue
Fabian Boulegue

Reputation: 6608

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:

enter image description here

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.

Upvotes: 20

Views: 24234

Answers (5)

Shakeel Ahmed
Shakeel Ahmed

Reputation: 6013

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.

Another Way

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

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

Upvotes: 5

Ali Pishvaee
Ali Pishvaee

Reputation: 302

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.

Upvotes: 3

Daniele
Daniele

Reputation: 2469

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
    }
}

Upvotes: 33

Suhaib
Suhaib

Reputation: 2061

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)

}

Upvotes: 13

repairman123
repairman123

Reputation: 1

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.

Upvotes: -10

Related Questions