web-dev-qa-db-ja.com

Swiftのタブバー項目を削除

私は現在、アプリをTabBarアイテムの実行中に削除する方法を見つけようとしています。それを有効または無効にする方法を見つけましたが、完全に削除する方法はありませんでした。

無効にするには、次のようにします。

enter image description here

ViewDidLoad

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

これはうまくいきますが、それでもユーザーはTabBarアイテムを見ることができ、それを完全に削除するだけです。方法はありますか?

Parseを介してTabBarItemをトリガーしたいのですが、Parse Dataをtrueに設定すると、他の方法では表示されないはずです。

14
Fabian Boulegue

viewControllerstabBarControllerプロパティを、不要になった特定の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
    }
}
23
Daniele

1つのアイテムを無効にしたい人のために。 @Danieleのソリューションからこのコードを使用します。 UITabBarControllerクラスに配置します

viewDidLoad() {

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

}
8
Suhaib

Swift 5:Tab Bar Controllerで1つのインデックスのみを削除する場合(このメソッドは、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つのインデックスが残ります。

2
Shakeel Ahmed

Swift 4.1追加のアイテムを削除するには、配列を使用します

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

配列のポイントは、目的の結果を得るために削除するインデックスの降順を使用する必要があります。

1
ali pishvaee