我有一个基本的计时器应用程序(更复杂的东西的开始),我试图让用户打开一个新的视图,更改一些设置,然后返回到时间屏幕,让计时器仍然滴答作响下。
此时,当用户返回计时器屏幕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 :(得分:1)
问题是您正在对定时器视图控制器执行新的segue。这将创建一个计时器视图控制器的新实例,而不是将其转换回原始实例。
首先从第二个控制器删除你设置的segue。然后,您将需要使用展开segue,您可以通过以下链接了解如何执行此操作。 (我最近和你一样有同样的问题,这也是我提供的)
https://developer.apple.com/library/ios/technotes/tn2298/_index.html
通过使用展开segue,您不需要添加任何其他代码,因为原始控制器上的标签仍应更新。