2016-12-31 96 views
-1

下面的代码是一个计时器。 3秒后,我希望用户能够关闭定时器。我试图解释我在评论的部分中想要做的事情 - 我尝试了我注释的内容,但没有奏效。我想保持代码相同,我只需要找到一种方法来停止使用UIButton i的计时器。如何从UIButton停止计时器?

import UIKit 
class ViewController: UIViewController { 
    @IBOutlet var i: UIButton! 
    @IBOutlet var u: UILabel! 

    var time = 0 
    var timer = Timer() 

    override func viewDidLoad() { 
     super.viewDidLoad() 
    } 

    @IBAction func start(_ sender: Any) { 
     b() 
    } 

    func action() { 
     time += 1 
     u.text = String(time) 
     if time == 2 { 
      u.alpha = 0 
     } 
     else if time > 3 { 
      u.alpha = 0.5 

       // if i.isSelected{ 
       // timer.invalidate} 
     } 
     else { 
      return 
     } 
    } 
    func b(){ 
     timer = Timer.scheduledTimer(timeInterval: 1, target: self, selector: #selector(ViewController.action), userInfo: nil, repeats: true) 
    } 

回答

2
  • 声明定时器可选

    var timer : Timer? 
    
  • 更换IBAction start

    @IBAction func start(_ sender: AnyObject) { 
        if timer == nil { 
         b() 
        } else { 
         timer?.invalidate() 
         timer = nil 
        } 
    } 
    
+0

没有点检查'nil',*不*绑定,然后使用条件链。 http://pastebin.com/Nghur9XK – Alexander

+0

可能需要使用'invalidate()'而不仅仅是'invalidate'。编译器不会给你一个警告吗? – jtbandes

+0

@vadian这个工作,但是按钮我是不会导致计时器停止。启动按钮是导致计时器开始停止的原因。我想按钮i让计时器停止。 –