我该如何让计时器停止运行?不是停顿,而是停下来.

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()
}

}

我可以启动计时器,但当我按下停止按钮时,它会自动重置,并再次开始计数.它不会停止.

成功了.我的项目出了问题!通过移除按钮并重新添加来修复.看起来我有个复制品什么的.

推荐答案

你不必使用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()
}

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

myTimer.invalidate()
myTimer = nil

在使实例变量计时器失效后,将其设置为nil是一件好事,如果需要使用相同的变量创建另一个计时器,则可以避免进一步的混淆.此外,方法名和变量应该以小写字母开头.

显示计时器无效并设置为零的屏幕截图.

屏幕截图

Update for Swift 2.2+

参见https://stackoverflow.com/a/36160191/2227743了解新的#selector语法替换Selector().

Swift相关问答推荐

为什么在Swift属性Wrapper中需要类型注释?

Swift UI在视图中排序不同的 struct

减go 用SWIFT struct 填充的NSCountedSet

异步/等待函数的XCTAssertThrowsError

如何获取嵌套数组中项的路径以修改数组?

如何使用可搜索在搜索栏中搜索包括>或<?

列表不显示信息

防止带有背景的文本扩展到 maxWidth

如何自己实现同一个 iOS 16 锁屏圆形小部件?

如何在不提交到应用store 的情况下在本地运行我的应用

`@available` 属性在 macOS 版本上被错误地限制

如何让 SwiftUI 中的文本在旋转框架的同时侧向显示?

iOS Swift - 如何更改表格视图的背景 colored颜色 ?

Swift - 获取本地日期和时间

在 ViewController 的 UICollectionView 中拉取刷新

FCM 后台通知在 iOS 中不起作用

3D touch /强制touch 实现

自定义 Google 登录按钮 - iOS

Swift 中的可选数组与空数组

使用 JSONEncoder 对类型为 Codable 的变量进行编码