我有一個基本的計時器應用程序(開始的東西有點複雜),我試圖讓用戶打開一個新的視圖,改變一些設置,然後返回到時間屏幕,讓計時器仍然滴答下來。如何讓NSTimer在返回ViewController時重新啓動更新標籤?
目前,當用戶返回到定時器屏幕ViewController
時,我的計時器仍在觸發並將時間打印到控制檯,但標籤已停止更新。
如何啓動計時器再次更新標籤?
class Countdown
{
var initial = 100
var count = 100
var timer: NSTimer!
var timerRunning = false
}
var globals = Countdown()
class ViewController: UIViewController {
@IBOutlet weak var timer1Label: UILabel!
@IBAction func unwindSegue(sender: UIStoryboardSegue) {} // Added to get rewind segue to work as recommended by Ben Sullivan
@IBAction func timer1(sender: AnyObject)
{
globals.timer = NSTimer.scheduledTimerWithTimeInterval(1, target: self, selector: #selector(ViewController.timerRunning), userInfo: nil, repeats: true)
}
override func viewDidLoad() {
super.viewDidLoad()
// Do any additional setup after loading the view, typically from a nib.
}
func timerRunning()
{
globals.timerRunning = true
let minutes = (globals.count/60) % 60;
let seconds = globals.count % 60
print("\(minutes):\(seconds)")
globals.count = globals.count - 1
timer1Label.text = String("\(minutes):\(seconds)")
}
override func didReceiveMemoryWarning() {
super.didReceiveMemoryWarning()
// Dispose of any resources that can be recreated.
}
}
目前,設置視圖控制器沒有任何東西 - 只是一個按鈕,將用戶返回給ViewController。
你如何從第二個視圖控制器返回到定時器控制器?你在使用正規賽嗎? –
是的。我已經ctrl +從IB中的按鈕拖動到'settingsViewController'並選擇'show'。然後完成相同的操作返回到'ViewController' – prikkles
Ben回答了你的問題,但作爲一個無關的代碼,這段代碼假定計時器每秒鐘觸發一次。但是,如果應用程序被暫停或阻塞主線程,您並不總能保證會發生這種情況。保存開始時間,然後計算當前時間和開始時間之間的差異更爲謹慎。 – Rob