在 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)