【问题标题】:Simple swift Stopwatch don't work简单的快速秒表不起作用
【发布时间】:2015-12-08 21:48:29
【问题描述】:

这是我的代码。

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



}

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

我不明白问题所在。我是一个 Swift 新手。如果你能帮助我,我会很高兴。

感谢您的关注

EDIT >> 标签文本以“00:00”开头。

【问题讨论】:

    标签: ios iphone swift stopwatch


    【解决方案1】:

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

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

    【讨论】:

    【解决方案2】:

    看起来你在搞乱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)
    
        }
    }
    

    首先从你的故事板视图控制器中删除所有出口并以这种方式连接它:

    如果您想查看THIS 示例项目。

    【讨论】:

    • 很高兴为您提供帮助..:)
    猜你喜欢
    • 1970-01-01
    • 2014-09-07
    • 1970-01-01
    • 2021-07-24
    • 1970-01-01
    • 2016-05-25
    • 2015-12-28
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多