首页 > 解决方案 > 计时器计数但不显示

问题描述

我刚开始学习如何编码和说英语^^

当我从 secondViewController 转到 ViewController 时,计时器启动。标签显示计时器。

我的问题是,当我第二次从 secondViewController 转到 ViewController 时,标签没有显示计时器。但是计时器继续计数(我打印出来了)。为什么标签不锁计时器?

我将非常感谢您的帮助

视图控制器

var habit = 0
var statusFirst = false
class ViewController: UIViewController {

    var firstTitel = ""
    var secondTitels = ""
    var timerTime = 0
    var timer = Timer()

    @IBOutlet weak var titelLabel: UILabel!
    @IBOutlet weak var dateLabel: UILabel!

    @IBOutlet weak var secondTitel: UILabel!
    @IBOutlet weak var secondDate: UILabel!

    @objc func processTimer() {

        timerTime += 1
        dateLabel.text = String(timerTime)
        print(timerTime)
    }

    override func viewDidLoad() {
        super.viewDidLoad()

        // Hide Label - START
        print(habit)
        if habit == 0 {
            titelLabel.isHidden = true
            secondTitel.isHidden = true

            dateLabel.isHidden = true
            secondDate.isHidden = true

            timer.invalidate()

        }else if habit == 1 {
            titelLabel.isHidden = false
            secondTitel.isHidden = true

            dateLabel.isHidden = false
            secondDate.isHidden = true

            timer = Timer.scheduledTimer(timeInterval: 1, target: self, selector: #selector(ViewController.processTimer), userInfo: nil, repeats: true)

        }else if habit == 2 {
            titelLabel.isHidden = false
            secondTitel.isHidden = false

            dateLabel.isHidden = false
            secondDate.isHidden = false
        }
        // Hide Label - END

            let titelObject = UserDefaults.standard.object(forKey: "firstTitel")

            if let titel = titelObject as? String {

                titelLabel.text = titel

            }

            let titellObject = UserDefaults.standard.object(forKey: "secondTitel")

            if let titell = titellObject as? String {

                secondTitel.text = titell

            }

        // Do any additional setup after loading the view, typically from a nib.
    }


    override func didReceiveMemoryWarning() {
        super.didReceiveMemoryWarning()
        // Dispose of any resources that can be recreated.
    }
}

第二视图控制器

class SecondViewController: UIViewController {

    var titelSecondViewController = ""
    var dateSecondViewController = 0

    @IBOutlet weak var titelField: UITextField!
    @IBOutlet weak var dateField: UITextField!


    @IBOutlet weak var okButton: UIButton!
    @IBAction func okButtonAction(_ sender: Any) {

        titelSecondViewController = titelField.text!

        if let datefield = dateField.text {
            if datefield == "" {
                dateSecondViewController = 0
            }else{
                dateSecondViewController = Int(datefield)!
            }
        }else{
            print("lol")
        }
    }



    override func viewDidLoad() {
        super.viewDidLoad()


    }


    // Segue - Start

    override func prepare(for segue: UIStoryboardSegue, sender: Any?) {

        if segue.identifier == "toViewController" {

            let viewController = segue.destination as! ViewController

            habit += 1
            print(habit)
            if habit == 1 {
                statusFirst = true
                UserDefaults.standard.set(titelSecondViewController, forKey: "firstTitel")


            }else if habit == 2{

                UserDefaults.standard.set(titelSecondViewController, forKey: "secondTitel")


            }else{
                return
            }
        }
    }

    // Segue - End



    override func didReceiveMemoryWarning() {
        super.didReceiveMemoryWarning()
        // Dispose of any resources that can be recreated.
    }


}

标签: swifttimer

解决方案


在第一种情况下habit = 1,调用计时器

 timer = Timer.scheduledTimer(timeInterval: 1, target: self, selector: #selector(ViewController.processTimer), userInfo: nil, repeats: true)

由于计时器具有强引用并且您不在invalidate()内部viewDidDisappear,因此在您关闭它后它会将 VC 保留在内存中

//

在第二次habit = 2中,您没有在 if 语句中初始化时间,那么第二个实例的标签(呈现的那个)不会更新,而隐藏的被解雇的标签会更新


推荐阅读