使用计时器值更新标签文本
Update Label Text with Timer Values
我知道有很多关于类似问题的答案,但似乎所有答案都不适合我的问题。我是 Swift 的新手,我的脑子里一直在想这些东西。
任务很简单。我有一个 ViewController
和一个名为“TimeIsTicking”的 Class,我在单独的 Swift
文件中定义了它们。我这样做是因为我想用来自 Timer
的数据提供 5 ViewController
(嵌套在 TabBarController
中)并且它们都必须 运行“同步”。
函数fireTimer
每秒将1的值赋给变量seconds
。
在 ViewController
中是一个 Label
,我希望每次当计时器为秒设置新值时更新标签。
dayLabelText
获取数据,这里一切正常,但从那时起我就卡住了。标签文本未更新。
我怀疑,必须有一个“循环”来重新加载标签的数据,我认为 fireTimer
中的循环就足够了,但我显然错了。
我尝试了“Observer
Thing”和“Dispatchqueue
Thing”但我玩得不好((显然)。
不胜感激。
这里是定时器的代码class:
import Foundation
import UIKit
class TimeIsTicking {
var seconds: Int = 0
static let timeFlow = TimeIsTicking()
func fireTimer() {
let finance = FinanceVC()
Timer.scheduledTimer(withTimeInterval: 1.0, repeats: true) { timer in
self.seconds += 1
finance.dayLabelText = "\(self.seconds)"
print("Seconds: ", self.seconds)
print("LabelText: ", finance.dayLabelText)
}
}
}
这里是VieWController的代码:
import UIKit
class FinanceVC: UIViewController {
@IBOutlet weak var dayLabel: UILabel!
var dayLabelText = String(TimeIsTicking.timeFlow.seconds)
override func viewDidLoad() {
super.viewDidLoad()
dayLabel.text = dayLabelText
TimeIsTicking.timeFlow.fireTimer()
}
// Do any additional setup after loading the view.
}
我看到了几个问题:
- 当
fireTimer()
returns 时,finance
对象超出范围。它将被释放。计时器将在不再存在的视图控制器上设置标签文本。
- 用
FinanceVC()
实例化 UIViewController
不会在屏幕上显示它。实例化后,您需要明确显示。例如,您可以通过从父视图控制器调用 present(_:animated:completion:) 来执行此操作。
- 计时器更新
dayLabelText
不更新 dayLabel.text
遵循有关如何显示视图控制器的基本 YT 教程可能会很好。
祝你好运,你很快就会得到它!
我知道有很多关于类似问题的答案,但似乎所有答案都不适合我的问题。我是 Swift 的新手,我的脑子里一直在想这些东西。
任务很简单。我有一个 ViewController
和一个名为“TimeIsTicking”的 Class,我在单独的 Swift
文件中定义了它们。我这样做是因为我想用来自 Timer
的数据提供 5 ViewController
(嵌套在 TabBarController
中)并且它们都必须 运行“同步”。
函数fireTimer
每秒将1的值赋给变量seconds
。
在 ViewController
中是一个 Label
,我希望每次当计时器为秒设置新值时更新标签。
dayLabelText
获取数据,这里一切正常,但从那时起我就卡住了。标签文本未更新。
我怀疑,必须有一个“循环”来重新加载标签的数据,我认为 fireTimer
中的循环就足够了,但我显然错了。
我尝试了“Observer
Thing”和“Dispatchqueue
Thing”但我玩得不好((显然)。
不胜感激。
这里是定时器的代码class:
import Foundation
import UIKit
class TimeIsTicking {
var seconds: Int = 0
static let timeFlow = TimeIsTicking()
func fireTimer() {
let finance = FinanceVC()
Timer.scheduledTimer(withTimeInterval: 1.0, repeats: true) { timer in
self.seconds += 1
finance.dayLabelText = "\(self.seconds)"
print("Seconds: ", self.seconds)
print("LabelText: ", finance.dayLabelText)
}
}
}
这里是VieWController的代码:
import UIKit
class FinanceVC: UIViewController {
@IBOutlet weak var dayLabel: UILabel!
var dayLabelText = String(TimeIsTicking.timeFlow.seconds)
override func viewDidLoad() {
super.viewDidLoad()
dayLabel.text = dayLabelText
TimeIsTicking.timeFlow.fireTimer()
}
// Do any additional setup after loading the view.
}
我看到了几个问题:
- 当
fireTimer()
returns 时,finance
对象超出范围。它将被释放。计时器将在不再存在的视图控制器上设置标签文本。 - 用
FinanceVC()
实例化UIViewController
不会在屏幕上显示它。实例化后,您需要明确显示。例如,您可以通过从父视图控制器调用 present(_:animated:completion:) 来执行此操作。 - 计时器更新
dayLabelText
不更新dayLabel.text
遵循有关如何显示视图控制器的基本 YT 教程可能会很好。
祝你好运,你很快就会得到它!