child viewController 如何使用按钮单击更改 tabBar 项目标题
How to change tabBar item title by using button click from child viewController
我 UITabBarController
使用故事板,我通过另一个 UITabBarController
class 自定义它,以便根据我的应用程序的要求执行一些更改。
因为我的 UITabBarController
有 4 child viewController。我的第一个 child 视图实现了一个按钮来更改 TabBarItem
的标题。
这是我的习惯UITabBarController
class
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
的标题,这个函数将被我提到的第一个 child viewController 调用多于。但我不知道为什么它 return 对我来说是零?但是当我在 viewDidLoad
中列出所有 tabBaritem 而不是 return nil.
这是第一个child 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)
}
}
你可以试试
if let tab = self.tabBarController as? TabbarViewController {
tab.language(false) // or true
}
Note this TabbarViewController(). creates another instance
已解决。我刚刚在 viewDidLoad 中删除了下面的代码并将其传递给 language
func。这意味着我们可以调用 tabBar.items 一次。这就是为什么当我尝试在 language
func.
中第二次调用时 returns 我为零
guard let item = tabBar.items else {
return
}
我 UITabBarController
使用故事板,我通过另一个 UITabBarController
class 自定义它,以便根据我的应用程序的要求执行一些更改。
因为我的 UITabBarController
有 4 child viewController。我的第一个 child 视图实现了一个按钮来更改 TabBarItem
的标题。
这是我的习惯UITabBarController
class
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
的标题,这个函数将被我提到的第一个 child viewController 调用多于。但我不知道为什么它 return 对我来说是零?但是当我在 viewDidLoad
中列出所有 tabBaritem 而不是 return nil.
这是第一个child 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)
}
}
你可以试试
if let tab = self.tabBarController as? TabbarViewController {
tab.language(false) // or true
}
Note this TabbarViewController(). creates another instance
已解决。我刚刚在 viewDidLoad 中删除了下面的代码并将其传递给 language
func。这意味着我们可以调用 tabBar.items 一次。这就是为什么当我尝试在 language
func.
guard let item = tabBar.items else {
return
}