Быстрое отключение элемента панели вкладок с функцией - PullRequest
0 голосов
/ 31 мая 2018

У меня есть элемент в панели вкладок, который нельзя включить, пока не будут выполнены определенные условия.Я могу отключить этот элемент в viewDidLoad() из своего подкласса UITabBarController, но у меня возникают проблемы при создании функции, которую я могу вызывать при необходимости.Ниже приведено то, что я имею до сих пор - по причинам, которые я не понимаю, мой массив элементов панели вкладок всегда равен нулю!(Если только он не инициализирован в viewDidLoad(), где он работает нормально.)

func setTabState(whichTab: Int) {
    let arrayOfTabBarItems = self.tabBar.items

    if let barItems = arrayOfTabBarItems {
        if barItems.count > 0 {
            let tabBarItem = barItems[whichTab]
            tabBarItem.isEnabled = !tabBarItem.isEnabled
        }
    }
}

Ответы [ 2 ]

0 голосов
/ 31 мая 2018

Решение оказалось комбинацией ответа Рохита Макваны и некоторых экспериментов:

  1. В viewDidLoad() моего CustomTabBarViewController Я использовал ответ Рохита
    , чтобы установить начальное состояниеэлементов панели вкладок.Я до сих пор не понимаю, почему использование DispatchQueue необходимо, но по одному за раз.
  2. В отдельном контроллере представления я принял протокол UITabBarControllerDelegate и установил
    tabBar?.delegate = self.
  3. Наконец, я создал наблюдатель свойства для переменной, которая устанавливается в значение true при соблюдении определенных условий:

var allButtonsPressed = false {
   didSet {
      if let items = tabBarController?.tabBar.items {
         items[1].isEnabled = allButtonsPressed
      }
   }
}

И это работает!Когда для allButtonsPressed установлено значение true, элемент панели вкладок включается мгновенно.Когда это ложно - отключено.Плюс один к Рохиту за помощь в поиске решения.Теперь, чтобы узнать больше о DispatchQueue ...

0 голосов
/ 31 мая 2018

Пожалуйста, поместите ниже код, где вы хотите отключить элемент панели вкладок в UITabbarController class

//Here Disable 0 Tabbar item

DispatchQueue.main.async {
    let items = self.tabBar.items!
    if items.count > 0 {
         items[0].isEnabled = false
    }
}
...