如何停止NSTimer.scheduledTimerWithTimeInterval

我如何阻止我的计时器运行? 不是一个停顿,而是一个停止。

import UIKit class LastManStandingViewController: UIViewController { @IBOutlet weak var timeLabel: UILabel! @IBOutlet weak var timeTextbox: UITextField! @IBOutlet weak var startButton: UIButton! @IBOutlet weak var stopButton: UIButton! var myCounter = 0 var myTimer : NSTimer = NSTimer() override func viewDidLoad() { super.viewDidLoad() // Do any additional setup after loading the view, typically from a nib. timeLabel.text = String(myCounter) } override func didReceiveMemoryWarning() { super.didReceiveMemoryWarning() // Dispose of any resources that can be recreated. } func startTimer(){ myTimer = NSTimer.scheduledTimerWithTimeInterval(1, target: self, selector: Selector("updateTimer"), userInfo: nil, repeats: true) println("func startTimer") } func stopTimer(){ myTimer.invalidate() myCounter = 0 timeLabel.text = String(myCounter) println("func stopTimer") } func updateTimer(){ timeLabel.text = String(myCounter++) println("func updateTimer") } @IBAction func startButton(sender: AnyObject) { startTimer() } @IBAction func stopButton(sender: AnyObject) { stopTimer() } 

}

我可以启动计时器,但是当我按下停止button时,它会自行重置,并重新开始计数。 它不停止。

使它工作。 东西是我的项目越野车! 通过删除button并重新添加它们来修复它。 看起来像我有一个重复或东西。

您不必使用Selector

 @IBAction func startButton(sender: AnyObject) { myTimer = NSTimer.scheduledTimerWithTimeInterval(1, target: self, selector: "updateTimer:", userInfo: nil, repeats: true) } 

此外,计时器将自己传递给所选的方法,所以如果需要,可以在方法内部使其失效:

 func updateTimer(timer: NSTimer) { timeLabel.text = String(Counter++) timer.invalidate() } 

或者,如果计时器是一个实例variables:

 myTimer.invalidate() myTimer = nil 

将实例variables定时器无效之后,它是一件好事,如果您需要创build具有相同variables的另一个定时器,它将避免进一步的混淆。 另外,方法名和variables应该以小写字母开头。

屏幕截图显示定时器无效并设置为零。

截图

更新Swift 2.2+

请参阅https://stackoverflow.com/a/36160191/2227743以获取新的;#selector语法replaceSelector()

你可以使用这个当满足一些条件,你想停止计时器:

 Timer.invalidate() 

这是一个简单的例子:

 func UpdateTimer(){ timeLabel.text = String(Counter++) if timeLabel.text == String("5") { Timer.invalidate() } } 

这将停止计时器。

你可以根据你的需要修改它。

正如Swift 2.2之前

 let printTimer = NSTimer.scheduledTimerWithTimeInterval(2.0, target: self, selector: #selector(printDescription), userInfo: nil, repeats: true) func printDescription() { print("Print timer will print every after 2.0 seconds") } 

打印计时器将在2.0秒后每打印一次