ios - 如何刷新标签文本

标签 ios swift iphone

我有一个应用程序,它有一个标签,用于显示本质上是时间戳的内容。基本上,当用户启动我的应用程序时,起始页有 3 个按钮。时间戳标签将显示在上次使用的按钮上方(例如上次锻炼:昨天或上次锻炼:2 天前)。

enter image description here

将标签的字符串与通过 UserDefaults 保存的日期与当前日期进行比较以获取差异(例如今天、昨天、2 天前、10 天前、32 天前等)。我有功能来运行此检查并更新在我能想到的每个地方发生的标签,以便在应用程序启动时更新它:viewWillAppearviewDidAppearviewDidLoad

问题是应用程序在启动时并不总是重新加载,因为 iOS 使其在后台保持“打开”状态。因此,除非我更改选项卡并返回到此开始选项卡以便调用 viewWillAppear,否则我的标签不会更新。也就是说,有时,出于某种原因,它实际上会重新加载并再次显示启动屏幕,但并非总是如此,我不知道为什么它会这样做......

无论 viewWillAppearviewDidAppearviewDidLoad 是否在,我可以做些什么来强制我的标签重新加载或运行该函数叫什么?

谢谢!

最佳答案

使用通知观察者模式

首先,设置通知以了解应用何时进入前台状态:

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/

相关文章:

iOS Swift 到 Objective-C 如何将弱引用传递给数组?

iOS 在 Swift 中禁用双击手势识别器

iphone - 无法在 ios 中创建 sqlite3 数据库

ios - 如何实现摄像头从前置摄像头更改为后置摄像头

ios - ViewControllers 作为实例变量

ios - 如何在 SwiftUI 中增加 navigationBarItem 的可点击区域?

iphone - iPhone应用程序:如何使用MPMoviePlayerController在应用程序中播放Youtube视频

iphone - Iphone的外部配件框架支持哪些协议(protocol)

ios - UITableViewCellAutomaticDimension 行为异常

ios - 访问 UITableView 标题 View