繁体   English   中英

简单的快速秒表不起作用

[英]Simple swift Stopwatch don't work

这是我的代码。

//
    //  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
    }



}

问题是当我运行构建时,它会出现带有大文本“ Stopwatch”的内屏,并且就像冻结在那里一样。 但是它应该带有一个标签,按钮的下方带有一个文本“开始”。 当我单击按钮时,它应该开始计数并且标签应更改为“ stopp”。 当我再次单击它应该停止计时器。

我不明白问题主义者。 我是Swift新手。 如果您能帮助我,我会很高兴。

感谢您的关注

编辑>>标签文本位于“ 00:00”的开头。

看来您搞砸了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)

    }
}

首先,从情节提要视图控制器中删除所有插座,并通过以下方式进行连接:

在此处输入图片说明

如果您要检查示例项目。

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

选择器应具有以下签名: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,但这至少应解决您的直接问题。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM