我不一定需要代码,但我希望了解如何处理我的问题的非常具体的步骤/逻辑。
我的初始 View Controller 是一个表格 View Controller 。它将显示单个计时器值并在当前单元格中显示其倒计时。计时器值是从单独的常规 View Controller 中检索的。这个 View Controller 包含一个 UIPicker 并且计时器值是使用用户从选择器中选择的值来计算的。
我在处理 tableviewcontroller 中的多个计时器的逻辑时遇到问题。应该为每个新创建的单元分配一个新的计时器对象,该对象是随着该单元的创建而创建的。这样,特定单元格使用使用特定 UIPicker 值创建的时间值。到目前为止,我只能将它带到每个单元格使用与创建的第一个单元格相同的计时器值的位置。
如何告诉位于初始 TableView Controller 中的新创建单元格,它应该只使用通过用户选择的特定计时器值创建的值,而 UIPicker 位于第二个 View Controller 中?如何分隔单元格之间的计时器值?
Best Answer-推荐答案 strong>
你永远不应该有一个带有逻辑实现的表格 View 单元格,所以单元格的接口(interface)最多应该有一个名为 setTime 的方法,你给它一个 String 它只是分配给它到标签。
既然已经澄清了,那么应该由谁来做逻辑呢?我相信您可以将计时器逻辑抽象到它们自己的对象中,因为表格 View Controller 要跟踪所有播放/暂停状态、已经过去了多少时间等太麻烦了。
因此, TableView Controller 剩下的工作就是从计时器对象中获取数据(剩余时间),将它们转换为 String s(您可能在这里有 VC 应该处理的格式化逻辑) 然后将这些字符串传递给单元格。
代码如下所示:
var timerObject = timerObjectArray[rowNumber]
var timeRemaining: Date = timerObject.getTimeRemaining()
var timeString: String = convertToString(timeRemaining)
cell.setTimeString(timeString)
所以现在我们尝试弄清楚何时/如何获得细胞。
至于什么时候,那将是你的选择,我认为是 NSTimer.scheduledTimerWithInterval 可以工作(注意保留周期)
现在,在您传递给每个周期运行的计划的方法中,您应该有这样的代码:
self.tableView.beginUpdates()
var visibleCells = self.tableView.visibleCells
for cell in visibleCells {
var indexPath = self.tableView.indexPath(for: cell)
var rowNumber = indexPath.row
var timeRemainString = getTimeRemainingStringFor(row: rowNumber)
cell.setTimeString(timeRemainString)
}
self.tableView.endUpdates()
希望这有帮助!我可能错过了什么,所以请询问
关于ios - 在 UITableViewController 中处理多个计时器值?,我们在Stack Overflow上找到一个类似的问题:
https://stackoverflow.com/questions/42310816/
|