我試圖讓我的 UILabel 的文本基于回圈計時器以 1 的增量自動更新。標簽鏈接到一個變數。我不確定這是否重要,但我正在使用自動布局錨點以編程方式處理我的 UI。
我知道這不起作用,因為變數位于 ViewDidLoad() 之外。我還嘗試在單獨的檔案中設定 UILabel 的子類,但我無法找出正確的方法來做到這一點。我無法將變數連接到子類并正確實作 didSet。
這是來自我的視圖控制器的相關代碼,感謝任何建議或替代方法。
import UIKit
class ViewController: UIViewController {
var numberOfBreaths = 0
override func viewDidLoad() {
super.viewDidLoad()
view.backgroundColor = .white
let breathCounter = UILabel()
breathCounter.translatesAutoresizingMaskIntoConstraints = false
breathCounter.text = "\(numberOfBreaths)"
breathCounter.textAlignment = .center
breathCounter.center = self.view.center
// Irrelevant hidden label code redacted
let startStop = RoundButton()
startStop.translatesAutoresizingMaskIntoConstraints = false
startStop.backgroundColor = .white
startStop.setTitle("breathe", for: .normal)
startStop.setTitleColor(.darkGray , for: .normal)
startStop.layer.borderWidth = 2.5
startStop.layer.borderColor = CGColor(red: 225, green: 225, blue: 0, alpha: 1)
startStop.addTarget(self, action: #selector(self.breathCount), for: .touchUpInside)
view.addSubview(breathCounter)
view.addSubview(holdTimer)
view.addSubview(startStop)
// Anchor code redacted
}
@objc func breathCount(_ sender: RoundButton) {
print("Button Tapped")
createTimer()
}
func createTimer() {
_ = Timer.scheduledTimer(timeInterval: 3.5, target: self, selector: #selector(nextBreath), userInfo: nil, repeats: true)
}
@objc func nextBreath() {
numberOfBreaths = 1
breathCounter.text = "\(numberOfBreaths)" // Error: Cannot find 'breathCounter' in scope
print(numberOfBreaths) // Prints expected number to console
}
}
查看背景關系
uj5u.com熱心網友回復:
如果您breathCounter在視圖控制器上宣告為一個屬性(就像您為 所做的那樣numberOfBreaths,您將可以從viewDidLoad和nextBreath函式訪問它。我還持有對您的參考Timer
class ViewController: UIViewController {
var numberOfBreaths = 0
let breathCounter = UILabel()
var timer : Timer?
然后在里面viewDidLoad,洗掉現有的let breathCounter = UILabel()行。
里面createTimer:
self.timer = Timer.scheduledTimer(timeInterval: 3.5, target: self, selector: #selector(nextBreath), userInfo: nil, repeats: true)
uj5u.com熱心網友回復:
您的錯誤訊息:// Error: Cannot find 'breathCounter' in scope提供了一個很好的線索......這完全是關于范圍的。
你UILabel在ViewDidLoad()方法中宣告你的,這就是它所在的地方;這就是它的范圍。一旦ViewDidLoad完成,*poof *UILabel從記憶體中消失。
你需要做的是把你let breathCounter = UILabel()的 ViewDidLoad移到外面,這樣它就會和你的 ViewController 一起創建;那么只要您的 ViewController 存在于記憶體中,您就可以參考它。
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/313640.html
