製作一個基本的秒錶。我的模型正在更新我的控制器,但是當我嘗試更新我的UILabel
時,它將返回nil
。UILabel意外返回無
當我試圖從計時器更新時,它只返回nil
。如果我更新控制器而不使用計時器,它將更新標籤。
我想我一定會錯過一些東西。
視圖控制器:
class ViewController: UIViewController {
var stopWatchBrainInstance = stopWatchBrain()
//Outlets
@IBOutlet weak var timerLabel: UILabel!
var displayValue:Int{
get{
print("getting Display Val")
return Int(timerLabel.text!)!
}
set{
timerLabel?.text! = String(val)
}
}
@IBAction func buttonPressed(_ sender: UIButton) {
if let buttonId = sender.currentTitle{
let testVAr = displayValue
stopWatchBrainInstance.setButton(pressed: buttonId, currentDisplayVal: testVAr)
displayValue = stopWatchBrainInstance.timerVal
}
}
}
型號:
class stopWatchBrain:NSObject {
//Public API
public func setButton(pressed identifier:String,currentDisplayVal:Int){
switch identifier{
case "Start":
startTimer(currentTime: currentDisplayVal)
break
case "Stop":
stopTimer()
default:
break
}
}
public var timerVal: Int {
get{
return stopwatchValue
}
}
//Vars
private var timer = Timer()
private var stopwatchValue:Int = 1
//Methods
private func startTimer (currentTime: Int){
timer = Timer.scheduledTimer(timeInterval: 1, target: self, selector: (#selector(self.runtheTimer)) , userInfo: nil, repeats: true)
}
private func stopTimer(){
print("stopping timer")
timer.invalidate()
}
@objc private func runtheTimer(){
stopwatchValue += 1
print(stopwatchValue)
ViewController().setTitle(stopwatchValue)
}
}
與您的問題無關,但您的'displayValue'屬性實施效果不佳。不要將標籤用作數據。只需使用標籤來顯示值。將您的屬性更改爲:var displayValue = 0 {didSet {timerLabel = String(displayValue)}}'。 – rmaddy
注意到謝謝maddy –
@rmaddy你的意思是'timerLabel.text = String(displayValue)' –