我的时间标签显示的是我打开应用程序时的时间,但它不会实时更新。我看了其他答案,但没有意义。
// CURRENT TIME
@IBOutlet weak var currentTimeLabel: UILabel!
override func viewDidLoad() {
super.viewDidLoad()
getCurrentTime()
}
// FORMAT TIME
func getCurrentTime(){
let formatter = DateFormatter()
formatter.dateFormat = "hh:mm"
let str = formatter.string(from: Date())
currentTimeLabel.text = str
}
我希望我的应用实时更新时间标签。提前致谢。这可能是一个非常简单的修复程序。
答案 0 :(得分:2)
您可以创建Timer
,并在下一分钟开始每分钟重复一次(因为您不需要几秒钟)(因此,在开始getCurrentTime()
之前请致电Timer
)。
timer
闭包内的每分钟代码都会执行,因此您可以说要调用getCurrentTime()
。现在,您的currentTimeLabel
将每分钟更新一次
let now = Date()
let date = Calendar.current.date(bySettingHour: Calendar.current.component(.hour, from: now), minute: Calendar.current.component(.minute, from: now) + 1, second: 0, of: now)!
let timer = Timer(fire: date, timeInterval: 60, repeats: true) { _ in
self.getCurrentTime()
}
我也建议您在方法之外(在全局范围内)使用formatter
变量
lazy var formatter: DateFormatter = {
let formatter = DateFormatter()
formatter.dateFormat = "hh:mm" // or "hh:mm a" if you need to have am or pm symbols
return formatter
}()
然后在getCurrentTime()
中获得String
并更改text
中的currentTimeLabel
func getCurrentTime() {
currentTimeLabel.text = formatter.string(from: Date())
}
答案 1 :(得分:0)
根据需要使用Timer
class ViewController: UIViewController {
@IBOutlet weak var currentTimeLabel: UILabel!
var timer = Timer()
override func viewDidLoad() {
super.viewDidLoad()
getCurrentTime()
}
private func getCurrentTime() {
timer = Timer.scheduledTimer(timeInterval: 1.0, target: self, selector:#selector(self.currentTime) , userInfo: nil, repeats: true)
}
@objc func currentTime() {
let formatter = DateFormatter()
formatter.dateFormat = "hh:mm"
currentTimeLabel.text = formatter.string(from: Date())
}
}