在 UITabbar 中的 VC 之间保持和检索 UserDefaults [关闭]

Posted

技术标签:

【中文标题】在 UITabbar 中的 VC 之间保持和检索 UserDefaults [关闭]【英文标题】:Persist and retrieve UserDefaults between VC in a UITabbar [closed] 【发布时间】:2017-11-27 00:53:54 【问题描述】:

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

【问题讨论】:

欢迎堆栈溢出。请take the tour. 【参考方案1】:

标签栏在加载时会实例化所有子视图控制器,因此您的第二个 VC 具有在标签栏加载时设置的语言,而不是在您在第一个视图控制器中设置时设置的语言。您应该在更改语言时发布通知并在 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

【讨论】:

这正是我想做的,但我不知道该怎么做。我试图在 TabBarViewController 中设置 Userdefaults,但它没有反映第二个视图控制器中的更改。这就是你定义的“发布通知”,我不知道该怎么做。 查看示例代码的编辑答案。

以上是关于在 UITabbar 中的 VC 之间保持和检索 UserDefaults [关闭]的主要内容,如果未能解决你的问题,请参考以下文章

UITabBar 保持 UIPickerView 的底部显示

您如何将 UIButton 保持在 UITabBar 的顶部(如 z-index)

iphone - UIActionSheet 和 UITabBar 之间的奇怪错误

使用代码布局时如何防止视图进入UITabBar

推送视图控制器后如何保留 UITabBar

如何使用 segue 维护 UITabBar