在UITabbar中保持并检索VC之间的UserDefaults

时间:2017-11-27 00:53:55

标签: swift uitabbarcontroller userdefaults

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

1 个答案:

答案 0 :(得分:0)

tabbar在加载时实例化所有子视图控制器,因此第二个VC具有在Tabbar加载时设置的语言,而不是在第一个视图控制器中设置的语言。您应该在更改语言时发布通知并在VC 2中侦听通知,然后相应地更新VC。

EDIT为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
}