我知道有很多關于類似問題的答案,但似乎所有答案都不適合我的問題。而且我是 Swift 的新手,我的腦子里正在為所有這些東西燃燒。
任務非常簡單。我有一個ViewController名為“TimeIsTicking”的類,我在一個單獨的Swift檔案中定義了它。我這樣做是因為我想為 5 個ViewController(嵌套在 中TabBarController)提供來自 的資料,Timer并且它們都必須“同步”運行。
該函式fireTimer每秒將 1 的值放入變數seconds。
在其中ViewController,Label我希望每次計時器將新值設定為秒時更新標簽。
dayLabelText獲取資料,一切都很好,但從那時起我就陷入了困境。標簽文本未更新。
我懷疑,必須有一個“回圈”來重新加載標簽的資料,我認為回圈fireTimer就足夠了,但我顯然錯了。
我嘗試了“Observer事物”和“Dispatchqueue事物”,但我玩得不好((顯然)。
幫助將不勝感激。
下面是定時器類的代碼:
import Foundation
import UIKit
class TimeIsTicking {
var seconds: Int = 0
static let timeFlow = TimeIsTicking()
func fireTimer() {
let finance = FinanceVC()
Timer.scheduledTimer(withTimeInterval: 1.0, repeats: true) { timer in
self.seconds = 1
finance.dayLabelText = "\(self.seconds)"
print("Seconds: ", self.seconds)
print("LabelText: ", finance.dayLabelText)
}
}
}
這是 ViewController 的代碼:
import UIKit
class FinanceVC: UIViewController {
@IBOutlet weak var dayLabel: UILabel!
var dayLabelText = String(TimeIsTicking.timeFlow.seconds)
override func viewDidLoad() {
super.viewDidLoad()
dayLabel.text = dayLabelText
TimeIsTicking.timeFlow.fireTimer()
}
// Do any additional setup after loading the view.
}
uj5u.com熱心網友回復:
我看到幾個問題:
- 回傳
finance時物件超出范圍。fireTimer()屆時將被釋放。計時器將在不再存在的視圖控制器上設定標簽文本。 UIViewController實體化aFinanceVC()不會在螢屏上顯示它。實體化后,您需要顯式顯示。例如,您可以通過從父視圖控制器呼叫present(_:animated:completion:)來做到這一點。- 定時器更新
dayLabelText不更新dayLabel.text
遵循有關如何顯示視圖控制器的基本 YT 教程可能會很好。
祝你好運,你很快就會得到它!
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/473506.html
