Как изменить заголовок элемента tabBar с помощью нажатия кнопки из дочернего viewController - PullRequest
0 голосов
/ 14 января 2019

У меня UITabBarController используется раскадровка, и я настраиваю ее для другого класса UITabBarController, чтобы внести некоторые изменения в соответствии с требованиями моего приложения.

Для моего UITabBarController имеется 4 дочерних viewControllers. И мой первый дочерний вид я реализовал одну кнопку, чтобы изменить заголовок TabBarItem.

Это мой заказ UITabBarController класс

class TabbarViewController: UITabBarController {

    override func awakeFromNib() {
        super.awakeFromNib()

    }
    override func viewDidLoad() {
        super.viewDidLoad()
        guard let item = tabBar.items else {
            return
        }
        for i in item {
          print("This is tabbar item title \(i.title)")
        }

    }

    func language(_ bool: Bool) {
        if bool {
           print("This is khmer")
           self.tabsController?.tabBar.tabItems[0].title = "tab1"
           self.tabsController?.tabBar.tabItems[1].title = "tab2"
           self.tabsController?.tabBar.tabItems[2].title = "tab3"
           self.tabsController?.tabBar.tabItems[3].title = "tab4"
        } else {

           self.tabsController?.tabBar.tabItems[0].title = "tab5"
           self.tabsController?.tabBar.tabItems[1].title = "tab6"
           self.tabsController?.tabBar.tabItems[2].title = "tab7"
           self.tabsController?.tabBar.tabItems[3].title = "tab8"

        }
    }


}

Я создал language func для изменения названия моего tabBaritem, и этот функционал будет вызываться первым дочерним viewController, который я упомянул выше. Но я не знаю, почему он возвращает мне ноль? Но когда я перечисляю все tabBaritem в viewDidLoad, и он не возвращает ноль.

Это первый дочерний viewController:

@IBAction func changeLanguageAction(_ sender: UIButton) {
    if CustomLocale.shared.LANGUAGE_IDENTIFIER == "EN" {

        if let tab  = self.tabBarController as? TabbarViewController {
            tab.language(true) 
        }
        sender.setImage(R.image.khmerFlag(), for: .normal)
    }else {
        if let tab  = self.tabBarController as? TabbarViewController {
            tab.language(false) 
        }

        sender.setImage(R.image.englishFlag(), for: .normal)
    }

}

Ответы [ 2 ]

0 голосов
/ 14 января 2019

решаемая. Я просто удалил этот код ниже в viewDidLoad и передал его language func. Это означает, что мы можем вызвать tabBar.items один раз. Вот почему он возвращает мне ноль, когда я пытаюсь позвонить второй раз в language func.

guard let item = tabBar.items else {
        return
    }
0 голосов
/ 14 января 2019

Вы можете попробовать

if let tab  = self.tabBarController as? TabbarViewController {
   tab.language(false) // or true 
}

Обратите внимание на это TabbarViewController (). создает другой экземпляр

...