2016-10-20 25 views
1

我想在iOS中使用Swift做一個簡單的計時器。 該程序工作正常,但每當我的START UIButton按下時,定時器的功能啓動和運行多次,按鈕按下。在iOS中的簡單計時器

我希望在定時器功能啓動後立即禁用START UIButton,以便它不會多次運行。

請幫助我一樣。

這是我的ViewController

的代碼
import UIKit 

class ViewController: UIViewController { 
    var time = 0.0 
    var timer = Timer() 

    @IBOutlet weak var lbl: UILabel! 

    @IBAction func start(_ sender: UIButton) 
    { 
     timer = Timer.scheduledTimer(timeInterval: 0.1, target: self, selector: #selector(ViewController.action), userInfo: nil, repeats: true) 
    } 

    @IBAction func pause(_ sender: UIButton) 
    { 
     timer.invalidate() 
    } 

    @IBAction func reset(_ sender: UIButton) 
    { 
     timer.invalidate() 
     time = 0.0 
     lbl.text = ("0") 
    } 

    func action() 
    { 
     time += 0.1 
     lbl.text = String(time) 
    } 

    override func viewDidLoad() { 
     super.viewDidLoad() 
     // Do any additional setup after loading the view, typically from a nib. 
    } 

    override func didReceiveMemoryWarning() { 
     super.didReceiveMemoryWarning() 
     // Dispose of any resources that can be recreated. 
    } 
} 
+0

只需將按鈕禁用到start()方法 –

回答

3

要禁用按鈕,你可以設置它的isUserInteractionEnabled財產start功能:

@IBOutlet weak var startButton: UIButton! 

@IBAction func start(_ sender: UIButton) { 
    timer = Timer.scheduledTimer(timeInterval: 0.1, target: self, selector: #selector(ViewController.action), userInfo: nil, repeats: true) 
    startButton.isEnabled = false 
} 

然後將其設置回真實的pausereset方法:

@IBAction func pause(_ sender: UIButton) { 
    timer.invalidate() 
    startButton.isEnabled = true 
} 

@IBAction func reset(_ sender: UIButton) { 
    timer.invalidate() 
    startButton.isEnabled = true 
    //the rest of your code 
} 
+0

最好是設置按鈕的enabled屬性而不是使用userInteractionEnabled。它將是'button.userInteractionEnabled = true',而不是'button.isUserInteractionEnabled = true'。你不想用getter調用setter。 – rmaddy

+0

@rmaddy完全同意第一個陳述,但不是關於第二個陳述。自從swift 3重命名並且'button.userInteractionEnabled = true'甚至不能編譯。 – alexburtnik

+0

@rmaddy它看起來像是對所有Bool屬性的有意重命名。 enabled-> isEnabled也被重新命名爲隱藏的,不透明的,集中的和一堆其他的;) – alexburtnik

2

最可靠的方法,以確保計時器只啓動和停止一旦寫兩個方法,其檢查當前的狀態(定時器不nil如果它當前正在運行):

var timer : Timer? 

func startTimer() 
{ 
    guard timer == nil else { return } 
    timer = Timer.scheduledTimer(timeInterval: 0.1, target: self, selector: #selector(ViewController.action), userInfo: nil, repeats: true) 
    // disable start button 
} 

func stopTimer() 
{ 
    guard timer != nil else { return } 
    timer!.invalidate() 
    timer = nil 
    // enable start button 
} 

在可以啓用方法/禁用相應的按鈕。