【问题标题】:Right way to make a real time countdown timer in a UITableViewCell?在 UITableViewCell 中制作实时倒数计时器的正确方法?
【发布时间】:2015-08-12 12:29:06
【问题描述】:
我正在尝试开发一个时间表应用程序。我有 TableViewController 显示当天的课程。如何使用倒数计时器实现单元格 - 显示当前课程?
我尝试使用每秒调用 tableView.reloadData() 的 NSTimer,但我认为这不是一个好方法,而且我的 CPU 使用率持续在 2-3%。
This 截图显示了我的想象。 (生物课应该有定时器,第三格)
【问题讨论】:
标签:
ios
swift
uitableview
tableviewcell
【解决方案1】:
不要重新加载整个表。计时器和控件的更新应该发生在表格视图单元子类中,而不是包含在包含的控制器中。
但是,当您的单元格收到 - (void)prepareForReuse 消息时,不要忘记关闭计时器,否则您会遇到问题。
【讨论】:
-
感谢您的回答。它有很大帮助。这个 ViewController 有另一个问题。您介意检查this 问题吗?
【解决方案2】:
我认为创建计时器的最佳方法是:
- 当计时器启动时,计算它将完成的时间。例如。计时器应该运行一个小时,现在是 8:28,所以它将在 9:28 完成。节省完成时间
- 每次更新显示时,计算从现在到保存时间之间的剩余时间,并用它更新标签。像这样你可以同时更新每个标签
【解决方案3】:
- 将 UILabel 添加到您的单元格中
- 获取课程时长,例如 60 分钟
- 启动 NSTimer 每隔一秒或一分钟调用一次,然后运行它。
- 从班级总时间 60:00 开始最高编号的标签。
- 如果计时器以秒为单位工作,每 60 次计时器被调用,获取 mins 字段 - 1(您可以将字符串转换为 2 个 NSNumber 类型的对象以便能够使用)。
- 并且每次最小字段得到 - 一个从 59 开始第二个字段。
- 每次调用计时器时都会获取第二个字段 - 一个
- 确保在字段达到零时标签正确完成。
你可以每次都使用 reloadData 或 reloadCell
希望这个答案可以帮助你好运