特定のタブバーアイテムを無効にするにはどうすればよいですか? 3番目のアイコンのようなもの...
self.tabBarItem.items![2].enabled = false
ワンライナーのような単純なタスクを実行する方法が必要ですか?上記は機能しません...
これが答えです
if let arrayOfTabBarItems = tabBarViewController.tabBar.items as! AnyObject as? NSArray,tabBarItem = arrayOfTabBarItems[2] as? UITabBarItem {
tabBarItem.enabled = false
}
Swift 3:を使用して同じことを行うための私のコードは次のとおりです
_ let tabBarControllerItems = self.tabBarController?.tabBar.items
if let tabArray = tabBarControllerItems {
tabBarItem1 = tabArray[0]
tabBarItem2 = tabArray[1]
tabBarItem1.isEnabled = false
tabBarItem2.isEnabled = false
}
_
上記のコードブロックを初心者向けのviewDidLoad()
メソッドに入れるだけで、tabBarItem
変数を作成することを忘れないでください。そうすれば、そこから始めてもかまいません。
単一のビューでtabBarItemを無効にするには(そしてビューが変更されたときに再度有効にするには):
クラス定義で、UITabBarItemsのプレースホルダークラス変数を作成します。
var tabBarItemONE: UITabBarItem = UITabBarItem()
var tabBarItemTWO: UITabBarItem = UITabBarItem()
etc...
次に、viewWillAppearで、必要に応じてアイテムを無効にします。
let tabBarControllerItems = self.tabBarController?.tabBar.items
if let arrayOfTabBarItems = tabBarControllerItems as! AnyObject as? NSArray{
tabBarItemONE = arrayOfTabBarItems[0] as! UITabBarItem
tabBarItemONE.enabled = false
tabBarItemTWO = arrayOfTabBarItems[1] as! UITabBarItem
tabBarItemTWO.enabled = false
}
viewWillDisappearで、アイテムを再度有効にします。
override func viewWillDisappear(animated: Bool) {
tabBarItemONE.enabled = true
tabBarItemTWO.enabled = true
}
誰かが方法を探している場合すべてのタブバーアイテムを無効にする:
if let items = tabBarController?.tabBar.items {
items.forEach { $0.isEnabled = false }
}
Swift 4.2
if let arrayOfTabBarItems = self.tabBar.items as AnyObject as? NSArray,let
tabBarItem = arrayOfTabBarItems[1] as? UITabBarItem {
tabBarItem.isEnabled = false
}
これがワンライナーです:
Objective Cでは、そのコード行は_viewDidLoad:
_で機能します。
Swiftでは、viewDidLoad()
では機能しませんが、viewWillAppear()
では機能します。
「AdityaKoukuntla」の回答のベースとして、この拡張機能を作成しました。
extension UIViewController {
func enableTabbarItems(_ items: [Int]) {
disableAllTabbarItems()
if let arrayOfTabBarItems = tabBarController?.tabBar.items as NSArray? {
for i in 0..<arrayOfTabBarItems.count {
if items.contains(i) {
if let tabBarItem = arrayOfTabBarItems[i] as? UITabBarItem {
tabBarItem.isEnabled = true
}
}
}
}
}
private func disableAllTabbarItems() {
if let arrayOfTabBarItems = tabBarController?.tabBar.items as NSArray? {
for i in 0..<arrayOfTabBarItems.count {
if let tabBarItem = arrayOfTabBarItems[i] as? UITabBarItem {
tabBarItem.isEnabled = false
}
}
}
}
}