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

Posted

技术标签:

【中文标题】如何使用子视图控制器中的按钮单击更改 tabBar 项目标题【英文标题】:How to change tabBar item title by using button click from child viewController 【发布时间】:2019-01-14 13:47:00 【问题描述】:

我有 UITabBarController 使用故事板,我通过另一个 UITabBarController 类自定义它,以便根据我的应用程序的要求执行一些更改。

对于我的UITabBarController,有 4 个子视图控制器。我的第一个子视图实现了一个按钮来更改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 的标题,这个func 将由我上面提到的第一个子viewController 调用。但我不知道为什么它返回我为零?但是当我在viewDidLoad 中列出所有tabBaritem 并且它不返回nil 时。

这是第一个子视图控制器:

@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)
    


【问题讨论】:

【参考方案1】:

你可以试试

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

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

【讨论】:

我听从了您的指示。请检查我的更新代码。还是不行 在 IB 中分配了 TabbarViewController【参考方案2】:

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

guard let item = tabBar.items else 
        return
    

【讨论】:

以上是关于如何使用子视图控制器中的按钮单击更改 tabBar 项目标题的主要内容,如果未能解决你的问题,请参考以下文章

使用视图控制器的 TabBar 按钮在框架中添加滑动子视图

在运行时更改 TabBar 中的选项卡

单击隐藏选项卡视图控制器中的后退按钮时如何显示选项卡

隐藏 TabBar 并在按钮单击时显示 NavigationController 工具栏

如何在单击按钮时在一个视图控制器中正确启用和禁用约束

打开 TabBar 子视图