2015-02-07 74 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個索引。