我有一个应用程序,它有一个标签,用于显示本质上是时间戳的内容。基本上,当用户启动我的应用程序时,起始页有 3 个按钮。时间戳标签将显示在上次使用的按钮上方(例如上次锻炼:昨天或上次锻炼:2 天前)。
将标签的字符串与通过 UserDefaults 保存的日期与当前日期进行比较以获取差异(例如今天、昨天、2 天前、10 天前、32 天前等)。我有功能来运行此检查并更新在我能想到的每个地方发生的标签,以便在应用程序启动时更新它:viewWillAppear
,viewDidAppear
和 viewDidLoad
问题是应用程序在启动时并不总是重新加载,因为 iOS 使其在后台保持“打开”状态。因此,除非我更改选项卡并返回到此开始选项卡以便调用 viewWillAppear
,否则我的标签不会更新。也就是说,有时,出于某种原因,它实际上会重新加载并再次显示启动屏幕,但并非总是如此,我不知道为什么它会这样做......
无论 viewWillAppear
、viewDidAppear
和 viewDidLoad
是否在,我可以做些什么来强制我的标签重新加载或运行该函数叫什么?
谢谢!
最佳答案
使用通知观察者模式
首先,设置通知以了解应用何时进入前台状态:
func sceneWillEnterForeground(_ scene: UIScene) {
NotificationCenter.default.post(name: Notification.Name("sceneWillEnterForeground"), object: nil)
}
注意:从 iOS 13 开始,所需的函数位于 SceneDelegate 文件中,而不是 AppDelegate 中。
接下来,监听该通知并通过在需要此类通知的地方添加观察者进行响应(例如在 viewDidLoad() 中):
NotificationCenter.default.addObserver(self, selector: #selector(willEnterForeground), name: Notification.Name("sceneWillEnterForeground"), object: nil)
注意:通知名称必须与您在 SceneDelegate.swift 文件中创建的名称匹配。
最后,创建上面提到的选择器。添加将执行以响应 willEnterForeground 通知的代码:
@objc func willEnterForeground() {
// Update your label here
}
注意:这里的函数名称必须与上面的选择器名称匹配。
如果您认为工作示例会有所帮助,则此链接指向一个使用通知观察者模式的小型应用程序: https://github.com/PepperoniJoe/MusicWithColor
关于ios - 如何刷新标签文本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63162690/