2016-04-17 27 views
1

我有一個基本的計時器應用程序(開始的東西有點複雜),我試圖讓用戶打開一個新的視圖,改變一些設置,然後返回到時間屏幕,讓計時器仍然滴答下來。如何讓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。

+0

你如何從第二個視圖控制器返回到定時器控制器?你在使用正規賽嗎? –

+0

是的。我已經ctrl +從IB中的按鈕拖動到'settingsViewController'並選擇'show'。然後完成相同的操作返回到'ViewController' – prikkles

+0

Ben回答了你的問題,但作爲一個無關的代碼,這段代碼假定計時器每秒鐘觸發一次。但是,如果應用程序被暫停或阻塞主線程,您並不總能保證會發生這種情況。保存開始時間,然後計算當前時間和開始時間之間的差異更爲謹慎。 – Rob

回答

1

問題是你正在執行新的segue到你的定時器視圖控制器。這將創建定時器視圖控制器的新實例,而不是繼續回到原始狀態。

首先刪除從第二個控制器到第一個控制器的設置。然後,您需要使用放鬆繼續,您可以通過以下鏈接瞭解如何執行此操作。 (我有同樣的問題,因爲自己最近,這就是我當時也提供)

https://developer.apple.com/library/ios/technotes/tn2298/_index.html

通過採用開卷SEGUE你不應該需要添加任何額外的代碼作爲標籤原來的控制器上應該仍在更新。

+0

太棒了!謝謝你,我一直在努力讓它工作幾個小時。我也必須觀看一些YouTube視頻,因爲文檔並不是最具啓發性的。我必須添加一個空的IBAction到我的'home'viewcontroller,然後拖動到settingsViewController上的按鈕上的退出圖標,並選擇我創建的空白IBAction - 我將相應地更新我的代碼。 – prikkles

+0

太棒了,很高興我能幫到你。直到有人在這裏展示我,我還沒有做過放鬆。如果一切順利,你可以打勾來說這是正確的答案,謝謝! –

相關問題