Ios 将.scheduledTimer的变量返回到Swift 3中的TableView单元格
我有一个Ios 将.scheduledTimer的变量返回到Swift 3中的TableView单元格,ios,swift,uitableview,swift3,Ios,Swift,Uitableview,Swift3,我有一个tableView,在调用tableView:didSelectRowAtIndexPath时,每个单元格中都有一个计时器。我试图在自定义单元格(CustomCell)中使用标签(cellName)来显示计时器递增。我正在使用.scheduledTimer中的#selector调用一个名为getTimer()的单独函数来增加值。代码如下所示 我将此代码缩写为仅显示相关信息 两件事: Mytime变量是在类级别定义的,因此getTimer()可以在每次.scheduledTimer刷新时增
tableView
,在调用tableView:didSelectRowAtIndexPath
时,每个单元格中都有一个计时器。我试图在自定义单元格(CustomCell
)中使用标签(cellName
)来显示计时器递增。我正在使用.scheduledTimer
中的#selector
调用一个名为getTimer()的单独函数来增加值。代码如下所示
我将此代码缩写为仅显示相关信息
两件事:
time
变量是在类级别定义的,因此getTimer()
可以在每次.scheduledTimer
刷新时增加该变量。我想在:didSelectRowAtIndexPath
中定义它,以便一次运行多个计时器。有没有一种方法可以在中定义它:didselectRowatingIndexPath
,或者通过从getTimer()返回增量来获得结果
getTimer
返回的字符串更新我的cellName
。这是静态的,目前正在考虑在.scheduledTimer刷新时刷新它的方法。我是否应该将indexPath.row
传递给getTimer
并在getTimer()
函数本身中更新它你对这个问题的逻辑是不对的。我会给你一个快速解决问题的办法。在类范围中创建两个变量
timeArray
和timeraray
var timeArray = [Int]()
var timerArray = [Timer]()
将此代码放入您的viewDidLoad
。创建阵列时,将计数1替换为tableview中的单元格数
timeArray = Array(repeating: 0, count: 1)
let timer = Timer(timeInterval: 1, target: self, selector: #selector(self.timerFired(_:)), userInfo: nil, repeats: true)
timerArray = Array(repeating: timer, count: 1)
在didSelectRow
tableview委托方法中,处理计时器验证和失效
if timerArray[indexPath.row].isValid{
timerArray[indexPath.row].invalidate()
}
else{
timerArray[indexPath.row] = Timer(timeInterval: 1, target: self, selector: #selector(self.timerFired(_:)), userInfo: indexPath.row, repeats: true)
timerArray[indexPath.row].fire()
}
添加此函数,该函数将在计时器启动时触发
func timerFired(_ timer:Timer){
if let index = timer.userInfo as? Int{
timeArray[index] += 1
}
}
最后,在tableview的cellForRow
datasource方法中设置标签文本
cell.cellName.text = time[indexPath.row]
当
timerFired
函数启动时,不要忘记重新加载特定单元格。此语法永远不会起作用。无法从目标/操作方法返回值。一个解决方案是创建一个自定义的表视图单元格类,并将计时器放在其中。是的,你可能是对的-我一直知道我是在用这种方式抓住救命稻草。自定义单元格类中的实现应该可以正常工作。我将在这里创建一个答案,一旦我为子孙后代解决了这个问题。谢谢。编辑您的问题并添加实际代码。我得到错误Type'(unsafemeutablepointer!)->time\u t'没有下标成员
。。。
cell.cellName.text = time[indexPath.row]