在Swift 4中显示实时标签?

时间:2018-12-23 10:41:13

标签: ios swift xcode time

我的时间标签显示的是我打开应用程序时的时间,但它不会实时更新。我看了其他答案,但没有意义。

// 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
    }

我希望我的应用实时更新时间标签。提前致谢。这可能是一个非常简单的修复程序。

2 个答案:

答案 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())
    }
}