如何通过使用子视图控制器中的按钮单击来更改tabBar项目标题

时间:2019-01-14 13:47:00

标签: ios swift uitabbarcontroller uitabbar uitabbaritem

我有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函数,以执行tabBaritem的标题更改,该函数将由我上面提到的第一个子viewController调用。但是我不知道为什么它返回零?但是当我在viewDidLoad中列出所有tabBaritem时,它不会返回nil。

这是第一个子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 :(得分:1)

您可以尝试

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

请注意此TabbarViewController()。创建另一个实例

答案 1 :(得分:0)

已解决。我刚刚在viewDidLoad中删除了以下代码,并将其传递给language func。这意味着我们可以一次调用tabBar.items。这就是为什么当我尝试在language函数中第二次调用时返回零的原因。

guard let item = tabBar.items else {
        return
    }