どうすれば停止タイマーの実行を停止しますか? 一時停止ではなく、停止のようなものです。
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()
}
}
タイマーは開始できますが、停止ボタンを押すとタイマーがリセットされ、再びカウントが始まります。停止しません。
動作しました。私のプロジェクトにバグがありました。ボタンを削除して再度追加することで修正しました。重複か何かがあったようです。
ベストアンサー1
以下を使用する必要はありません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
。また、メソッド名と変数は小文字で始まる必要があります。
タイマーが無効になり、nil に設定されていることを示すスクリーンショット。
Swift 2.2 以降のアップデート
見るhttps://stackoverflow.com/a/36160191/2227743#selector
を置き換える新しい構文ですSelector()
。