Ios 如何使用子视图控制器中的按钮单击更改选项卡栏项目标题
我有Ios 如何使用子视图控制器中的按钮单击更改选项卡栏项目标题,ios,swift,uitabbarcontroller,uitabbar,uitabbaritem,Ios,Swift,Uitabbarcontroller,Uitabbar,Uitabbaritem,我有UITabBarController使用故事板,我通过另一个UITabBarController类自定义它,以便根据我的应用程序的要求执行一些更改 对于我的UITabBarController有4个子视图控制器。我的第一个子视图实现了一个按钮来更改TabBarItem的标题 这是我的自定义uitabarcontroller类 class TabbarViewController: UITabBarController { override func awakeFromNib() {
UITabBarController
使用故事板,我通过另一个UITabBarController
类自定义它,以便根据我的应用程序的要求执行一些更改
对于我的UITabBarController
有4个子视图控制器。我的第一个子视图实现了一个按钮来更改TabBarItem
的标题
这是我的自定义uitabarcontroller
类
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将调用此func。但我不知道为什么它会给我零?但是当我在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)
}
}
你可以试试
if let tab = self.tabBarController as? TabbarViewController {
tab.language(false) // or true
}
请注意此选项卡BarViewController()。创建另一个实例
解决了。我刚刚在viewDidLoad中删除了下面的代码,并将其传递给
language
func。这意味着我们可以调用tabBar.items一次。这就是为什么当我在language
func中尝试第二次调用时,它会返回nil
guard let item = tabBar.items else {
return
}
我听从了你的指示。请检查我的更新代码。它仍然没有在IB中分配类
TabbarViewController