如何在返回ViewController时让N​​STimer重新开始更新标签?

时间:2016-04-17 15:42:03

标签: ios swift timer nstimer

我有一个基本的计时器应用程序(更复杂的东西的开始),我试图让用户打开一个新的视图,更改一些设置,然后返回到时间屏幕,让计时器仍然滴答作响下。

此时,当用户返回计时器屏幕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的按钮。

1 个答案:

答案 0 :(得分:1)

问题是您正在对定时器视图控制器执行新的segue。这将创建一个计时器视图控制器的新实例,而不是将其转换回原始实例。

首先从第二个控制器删除你设置的segue。然后,您将需要使用展开segue,您可以通过以下链接了解如何执行此操作。 (我最近和你一样有同样的问题,这也是我提供的)

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

通过使用展开segue,您不需要添加任何其他代码,因为原始控制器上的标签仍应更新。