跟踪每个小区的时间,如小时应用

时间:2016-09-19 15:56:54

标签: ios swift nstimer

我有一个UITableViewCell,其中一些按钮的时间值类似于小时应用。每当我点击与小区相关的按钮时,我想跟踪每个单元格上的时间,就像小时应用程序那样 - 如下面的屏幕截图所示。

我已经知道如何处理计时器:以下功能用于更新通用标签上的时间:

var startTime = TimeInterval()
var timer : Timer?


func updateTime() {

        let currentTime = NSDate.timeIntervalSinceReferenceDate

        //Find the difference between current time and start time.

        var elapsedTime: TimeInterval = currentTime - startTime

        //calculate the minutes in elapsed time.
        let minutes = UInt8(elapsedTime / 60.0)

        elapsedTime -= (TimeInterval(minutes) * 60)

        //calculate the seconds in elapsed time.
        let seconds = UInt8(elapsedTime)

        elapsedTime -= TimeInterval(seconds)

        //add the leading zero for minutes, seconds and millseconds and store them as string constants

        let strMinutes = String(format: "%02d", minutes)
        let strSeconds = String(format: "%02d", seconds)

        //concatenate minuets, seconds and milliseconds as assign it to the UILabel

        self.timeLabel?.text = "\(strMinutes):\(strSeconds)"
        //labelShake(labelToAnimate: self.timeLabel!, bounceVelocity: 5.0, springBouncinessEffect: 8.0)

    }

我可以在ViewDidLoad中添加以下代码来启动计时器:

        timer = Timer()
        timer = Timer.scheduledTimer(timeInterval: 0.01, target: self, selector: #selector(updateTime), userInfo: nil, repeats: true)
        startTime = NSDate.timeIntervalSinceReferenceDate

为了点击单元格中的按钮,我在单元格的按钮上添加了一个标记,以跟踪我点击的单元格,如下所示

func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {


        //...
        cell.timerViewButton.tag = indexPath.row
        cell.timerViewButton.addTarget(self, action: #selector(startTimerForCell), for: UIControlEvents.touchUpInside)
        //...

       return cell

}

//我可以跟踪点击此处的按钮。

func startTimerForCell(sender : UIButton) {


        print("SelectedCell \(sender.tag)")


    }

任何人都可以帮忙我如何更改单元格上的按钮标题,点击按钮计数和潜在的停止计时器

enter image description here

1 个答案:

答案 0 :(得分:0)

据我了解,您的问题是想跟踪每个计时器的状态。请记住$scope.$apply(function(){ /* update state here */ })是可重用的,当您滚动或查看它时它会保持变化。

通常我会使用数组来轻松跟踪单元格中的所有状态或值。

因此,在您的控制器中,类变量可能如下所示

UITableViewCell

然后,在你的开始函数struct Timer { let start = false let seconds = 0 // can have more properties as your need } var timers = [Timer]() 将继续监视那些数组。

startTimerForCell