我有一个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)")
}
任何人都可以帮忙我如何更改单元格上的按钮标题,点击按钮计数和潜在的停止计时器
答案 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