我有一个带有 3 个 VC 的 TabBar 应用程序。第一个显示一个 UIPickerView,允许用户选择三种语言中的一种,并且标签文本根据选择的语言进行翻译。我坚持使用 UserDefaults 选择的语言,没什么大不了的,但是当我进入第二个 VC 时,标签没有被翻译。如果我关闭应用程序并重新打开它,则会发生更改,因此所选语言有效地保留并被检索。我正在使用带有 Xcode 9 的 Swift 4。谢谢!
问问题
23 次
1 回答
0
tabbar 在加载时实例化所有子视图控制器,因此您的第二个 VC 具有在 Tabbar 加载时设置的语言,而不是在您在第一个视图控制器中设置它时设置的语言。您应该在更改语言时发布通知并在 VC 2 中收听通知,然后相应地更新 VC 2。
编辑NotificationCenter添加代码:
在您设置语言的 VC 中:
NotificationCenter.default.post(name: NSNotification.Name("language changed"), object: self, userInfo: ["language": "en"])
在要更新的 VC 中:
NotificationCenter.default.addObserver(forName: NSNotification.Name("language changed"), object: nil, queue: .main) { notification in
guard let language = notification.userInfo ["language"] else {
return
}
//Do language stuff here
}
于 2017-11-27T00:58:43.413 回答