-1

我有一个带有 3 个 VC 的 TabBar 应用程序。第一个显示一个 UIPickerView,允许用户选择三种语言中的一种,并且标签文本根据选择的语言进行翻译。我坚持使用 UserDefaults 选择的语言,没什么大不了的,但是当我进入第二个 VC 时,标签没有被翻译。如果我关闭应用程序并重新打开它,则会发生更改,因此所选语言有效地保留并被检索。我正在使用带有 Xcode 9 的 Swift 4。谢谢!

4

1 回答 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 回答