IvO*_*vOS 4 nstimer viewcontroller ios swift
我有一个 NSTimer(),它从单击按钮开始。如果我希望timer显示在标签上,我可以在同一个视图控制器中执行此操作,但我希望计时器继续运行并且值 (1...2...3) 显示在下一个视图中控制器。我有一个在下一个视图控制器上显示时间变量的标签,但它只在按下按钮时显示时间变量的值,并且不会继续。时间变量被传递,但运行它的函数不是。我该怎么做呢?
var timer = NSTimer()
var time = 0
Run Code Online (Sandbox Code Playgroud)
内部 viewDidLoad :
timer = NSTimer.scheduledTimerWithTimeInterval(1, target: self, selector: Selector("timerFunc"), userInfo: nil, repeats: true)
func timerFunc() {
time++
//time label displays the time (1..2...3 etc)
timeLabel.text = String(time)
}
Run Code Online (Sandbox Code Playgroud)
SecondSceneViewController 有一个从这个视图控制器传递的时间变量:
override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) {
var secondScene = segue.destinationViewController as!
SecondViewController
secondScene.time = time
}
Run Code Online (Sandbox Code Playgroud)
当我转到 secondViewController 时,时间变量内的值是按下按钮时时间变量的值,它不会继续运行。我将如何将计时器传递给下一个视图控制器以显示值?
IMO 您应该将计时器的代码提取到单例中,然后从两个 ViewControllers 访问它
这是一个让您入门的简单方法:
class TimerManager {
var realSharedInstance: TimerManager?
var sharedInstance: TimerManager {
get{
if let realSharedInstance = realSharedInstance {
return realSharedInstance
}
else{
realSharedInstance = TimerManager()
return realSharedInstance!
}
}
}
var timer: NSTimer
init() {
timer = NSTimer()
}
func rest() {
timer = NSTimer()
}
Run Code Online (Sandbox Code Playgroud)
}