gpt4 book ai didi

swift - 计时器计数但不显示

转载 作者:搜寻专家 更新时间:2023-11-01 05:32:54 25 4
gpt4 key购买 nike

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

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

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

非常感谢你的帮助

View Controller

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

第二 View Controller

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


}

最佳答案

在第一种情况下habit = 1 所以定时器被调用

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

因为计时器有一个强引用并且你没有在 viewDidDisappearinvalidate() 它,所以它在你关闭它后将 VC 保留在内存中

//

在第二次 habit = 2 并且你没有在它的 if 语句中初始化时间然后第二个实例(呈现的)的标签不会更新,而隐藏的被解雇了做

关于swift - 计时器计数但不显示,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51679543/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com