简单快捷的秒表不起作用

时间:2015-09-12 12:08:40

标签: ios iphone swift stopwatch

这是我的代码。

//
    //  ViewController.swift
    //  Stopwatch
    //
    //  Created by Orkun Atasoy on 12.09.15.
    //  Copyright (c) 2015 Orkun Atasoy. All rights reserved.
    //


import UIKit

class ViewController: UIViewController {

    @IBOutlet weak var timerLabel: UILabel!
    @IBOutlet weak var timerButton: UIButton!

    var timer : NSTimer?
    var ms = 0

    @IBAction func buttonTapped(sender: AnyObject) {

        timerButton.setTitle("Stopp", forState:UIControlState.Normal)

        self.timer = NSTimer.scheduledTimerWithTimeInterval(0.01, target: self, selector: Selector("update"), userInfo: nil, repeats: true)
    }


    func update() {
        self.ms++
        timerLabel.text = String(self.ms)enter code here
    }



}

问题是,当我运行构建时,它带有大文本的内窥镜"秒表"它就像冻结在那里。但它应该是一个标签,按钮下方有一个文本" start"。当我点击按钮时,它应该开始计数,标签应该改为" stopp"。当我再次点击时,它应该停止计时器。

我不明白问题所在。我是斯威夫特的新手。如果你能帮助我,我会很高兴的。

感谢您的关注

编辑>>标签文字位于开头#00; 00:00"。

2 个答案:

答案 0 :(得分:1)

看起来你正在搞乱IBOutlet个连接,我已经纠正了你的一些代码,这里有代码:

import UIKit

class ViewController: UIViewController {

    @IBOutlet weak var timerLabel: UILabel!
    @IBOutlet weak var timerButton: UIButton!

    var timer : NSTimer?
    var ms = 0

    override func viewDidLoad() {

        timerLabel.text = "00:00"
    }

    @IBAction func buttonTapped(sender: AnyObject) {

        if timerButton.currentTitle == "Stopp" {
            timer?.invalidate()
            timerButton.setTitle("Start", forState:UIControlState.Normal)
        } else {

            timerButton.setTitle("Stopp", forState:UIControlState.Normal)

            self.timer = NSTimer.scheduledTimerWithTimeInterval(0.01, target: self, selector: Selector("update"), userInfo: nil, repeats: true)
        }
    }

    func update() {
        self.ms++
        timerLabel.text = String(self.ms)

    }
}

首先从故事板视图控制器中删除所有插座并以这种方式连接:

enter image description here

如果你想检查THIS示例项目。

答案 1 :(得分:0)

计时器触发时调用的方法不正确。来自文档:

  

选择器应具有以下签名:timerFireMethod :(包括冒号以指示该方法接受参数)。计时器将自身作为参数传递,因此该方法将采用以下模式:    - (void)timerFireMethod:(NSTimer *)timer

所以你的方法应该是:

func update(timer: NSTimer) {
    self.ms++
    timerLabel.text = String(self.ms)
}

你应该将你的计时器设置为:

NSTimer.scheduledTimerWithTimeInterval(0.01, target: self, selector: "update:", userInfo: nil, repeats: true)

还有一些我可以提及的事情 - 比如在明确使用变量时不需要使用self,并且使用调度计时器而不是NSTimer,但这至少可以解决您的直接问题。 / p>