2015-02-07 77 views
5

我目前试图找到一种方法来删除运行应用程序时TabBar项目,我找到了一种方法来启用或禁用它,但不是完全删除它。

对于禁用它,我做的事:在Swift中删除TabBar项目

enter image description here

在viewDidLoad中

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

这种运作良好,但仍是用户可以看到的TabBar项目,我会简单地完全移除它,有没有一种方式?

我想通过Parse来触发TabBarItem,如果我将Parse数据设置为true,它应该显示其它不应该的方式。

回答

15

你想要设置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 
    } 
} 
+0

你知道如何让它在移除之后回来吗? – Adam 2017-03-31 01:49:14

+0

我知道现在这已经很老了,但是关于'你怎么把它弄回来?' - 保留对原始的引用(例如,在viewDidLoad中获取原始viewControllers数组的副本),以便您可以随时恢复到原始视图。 – 2017-06-04 13:16:29

-4

更好的方法是只使用文字而不是图像。选择'空格'作为文本,然后禁用它。那么用户将无法看到它。我没有测试过,但我确定它会工作。

4

对于那些只是想禁用一个项目。使用@ Daniele解决方案中的代码。并把它放在你的UITabBarController类

viewDidLoad() { 

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

} 
+0

您是否知道在删除它之后能够恢复它? – Adam 2017-03-31 01:49:24

2

雨燕3.1:在标签栏控制器只去掉一个索引(可以使用在viewDidLoad中和viewDidAppear两者的此方法)

override func viewDidAppear(_ animated: Bool) { 

} 
override func viewDidLoad() { 
    super.viewDidLoad() 

} 

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

,如果您有4在标签栏指数和要删除的最后2指数

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

第一行删除索引第三届之一,你将剩下的3 4时再删除在第二dex它会再次删除第三个索引,然后你将在最后保留2个索引。