如何使用子视图控制器中的按钮单击更改 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 项目标题的主要内容,如果未能解决你的问题,请参考以下文章