因此,我的目标是为每个单元重用计时器。除了一点优点,每件事都工作正常。 cell.indexpath.row从1而不是0开始。甚至当我滚动到顶部并弹回时,它也会变为1。问题是计时器是基于IndexPath创建的。我已经尝试了许多解决方法,以增加单元的大小,无意间尝试了开始和结束更新路线,但似乎无法将其锁定。基于我已有的代码的任何建议,或针对该解决方案的新解决方案问题?
定时器VC
var timer = Timer()
func numberOfSections(in tableView: UITableView) -> Int {
return 1
}
func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
return LiveActivityArray.count
}
func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
if let cell = tableView.dequeueReusableCell(withIdentifier: "liveCell", for: indexPath) as? liveActivitiesCell {
//print("VISBLE CELL \(tableView.indexPathsForVisibleRows)")
// var visibleCells = self.tableview.visibleCells
var prop = hudProp()
Prop = LiveActivityArray[indexPath.item]
cell.configureCell(properties: Prop, timer: &timer)
cell.property = Prop
cell.delegateFavorite = self
cell.delegate = self
cell.indexpath = indexPath
print("INDEX PATH CELL \(cell.indexpath.row)")
cell.StartTimerFilter(timer: &timer)
return cell
}
}
return UITableViewCell()
}
TableviewCell
func configureCell(properties: hudProp, timer: inout Timer) {
if DataService.instance.BothDatesReturnedTrue == true {
timer.invalidate()
StartTimerFilter(timer: &timer)
}
@objc func TimerFuncFilter(timer: Timer) {
property.getAuctionTime(property.Begin, AuctionEnd: property.End, postAuctionStart: _leftLabel: leftTime, _leftLabelDayHour: leftTimeDaysHrs, _midLabel: midTime, _midLabelHourMin: midTimeHrsMin, _rightLabel: rightTime, _rightLabelMinSec: rightTimeMinSec, _timer: timer, EndsLabelFunc: EndsOnLabel, EndsDateLabelFunc: EndsOnDateLabel)
}
}
func StartTimerFilter(timer: inout Timer) {
timer = Timer.scheduledTimer(timeInterval: 1, target: self, selector: #selector(liveActivitiesCell.TimerFuncFilter), userInfo: nil, repeats: true)
DataService.instance.BothDatesReturnedTrue = false
}
如您所见,我一直在使每个新单元格的计时器无效,但是问题又是它从一个单元格开始。我可以继续使用此代码并进行修改吗,还是应该重新考虑此问题的体系结构。
预先谢谢您,我已经尝试使用许多失败的解决方案解决此问题已有几个星期了。
最佳答案
因此,如果有人在挣扎或遇到类似情况,解决方案是在视图控制器中不包含计时器,而将其完全保留在您的视图中。第二个方面使一切正常工作,而对于许多计时器而言,它们都没有进入保留周期,这是使用
func prepareForReuse() {
super.prepareForReuse
timer.invalidate
}
关于ios - 尝试为cellForRowAtIndexPath重用计时器,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/52408242/