如何从单独的表视图控制器中将标签设置为值?

时间:2017-07-21 17:10:36

标签: swift types timer

所以我在swift中设置了一个定时器,它接收从另一个视图控制器输入的文本。我不确定如何将计时器标签设置为值" timerTime"其成员名为" time"来自另一个控制器。

import UIKit

class ViewController: UIViewController, UITextFieldDelegate {
    @IBOutlet weak var timerLabel: UILabel!
    @IBOutlet weak var pauseButton: UIButton!
    @IBOutlet weak var startButton: UIButton!
    @IBOutlet weak var timerTaskName: UILabel!
    @IBOutlet weak var timerTimeSetting: UILabel!

    var timerTask: TaskData?
    var timerTime: TaskData?
    var seconds = 100
    var timer = Timer()
    var isTimerRunning = false
    var resumeTapped = false

    @IBAction func cancel(_ sender: Any) {
        dismiss(animated: true, completion: nil)
    }

    @IBAction func startButtonTapped(_ sender: Any) {
        if isTimerRunning == false {
            runTimer()
            self.startButton.isEnabled = false
        }
    }

    func runTimer() {
        timer = Timer.scheduledTimer(timeInterval: 1, target: self, selector: (#selector(ViewController.updateTimer)), userInfo: nil, repeats: true)
        isTimerRunning = true
        pauseButton.isEnabled = true
    }

    @IBAction func pauseButtonTapped(_ sender: UIButton) {
        if self.resumeTapped == false {
            timer.invalidate()
            self.resumeTapped = true
            self.pauseButton.setTitle("Resume",for: .normal)
        } else {
            runTimer()
            self.resumeTapped = false
            self.pauseButton.setTitle("Pause",for: .normal)
        }
    }

    @IBAction func resetButtonTapped(_ sender: Any) {
        timer.invalidate()
        seconds = 60
        self.timerLabel.text = timeString(time: TimeInterval(seconds))
        if self.resumeTapped == true {
            self.resumeTapped = false
            self.pauseButton.setTitle("Pause",for: .normal)
        }
        isTimerRunning = false
        pauseButton.isEnabled = false
        startButton.isEnabled = true
    }

    func updateTimer() {
        if seconds < 1 {
            timer.invalidate()
            //Send alert to indicate "time's up!"
        } else {
            seconds -= 1
            timerLabel.text = timeString(time: TimeInterval(seconds))
        }
    }

    func timeString(time:TimeInterval) -> String {
        let hours = Int(time) / 3600
        let minutes = Int(time) / 60 % 60
        let seconds = Int(time) % 60
        return String(format:"%02i:%02i:%02i", hours, minutes, seconds)
    }

    override func viewDidLoad() {
        super.viewDidLoad()
        pauseButton.isEnabled = false

        if let task = timerTask {
            timerTaskName.text = task.task
        }

        if let timerTimeLeft = timerTime {
            timerTimeSetting.text = timerTimeLeft.time
        }

        self.timerLabel.text = timeString(time: TimeInterval(seconds))
    }
}

基本上我试图将timerTimeLeft.time变为我的seconds变量。我尝试了许多不同的事情,但我只是被卡住了。

1 个答案:

答案 0 :(得分:1)

您需要将计时器添加到runloop。这样:

func runTimer() {
    timer = Timer.scheduledTimer(timeInterval: 1, target: self, selector: (#selector(ViewController.updateTimer)), userInfo: nil, repeats: true)
    isTimerRunning = true
    pauseButton.isEnabled = true
}

应该是

func runTimer() {
    timer = Timer.scheduledTimer(timeInterval: 1, target: self, selector: (#selector(ViewController.updateTimer)), userInfo: nil, repeats: true)
    RunLoop.current.add(timer, forMode: .defaultRunLoopMode) // <-- Notice this
    isTimerRunning = true
    pauseButton.isEnabled = true
}