it-swarm.com.ru

Отключить элемент панели вкладок - Swift

Как отключить определенный элемент панели вкладок? Что-то вроде 3-го значка ...

self.tabBarItem.items![2].enabled = false

Должен ли быть способ сделать такую ​​простую задачу, как один вкладыш? Выше не работает ...

7
Edward Hasted

Вот ответ

if  let arrayOfTabBarItems = tabBarViewController.tabBar.items as! AnyObject as? NSArray,tabBarItem = arrayOfTabBarItems[2] as? UITabBarItem {
        tabBarItem.enabled = false
    }
11
Aditya Koukuntla

Вот мой код для того же, используя 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, и все в порядке!

7
Johan Tingbacke

Чтобы отключить 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

}
3
AT3D

Для этого я создал расширение, ответ "Адитья кукунтла":

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

Вот одна строка:

В Objective C эта строка кода работает в viewDidLoad:.

В Swift это не работает в viewDidLoad(), но работает в viewWillAppear().

1
Dmitry Isaev

Swift 4.2

if let arrayOfTabBarItems = self.tabBar.items as AnyObject as? NSArray,let 
   tabBarItem = arrayOfTabBarItems[1] as? UITabBarItem {
   tabBarItem.isEnabled = false
}
1
Safad Funy

Если кто-то ищет, как отключить все элементы панели вкладок:

if let items = tabBarController?.tabBar.items {
        items.forEach { $0.isEnabled = false }
}
0
Tung Fam