iOS - 延迟后的 UITableView reloadData
Posted
技术标签:
【中文标题】iOS - 延迟后的 UITableView reloadData【英文标题】:iOS - UITableView reloadData after delay 【发布时间】:2017-12-14 06:02:46 【问题描述】:我正在尝试创建一个 UITablView 扩展函数以在一段时间延迟后重新加载表,例如:
extension UITableView
func reloadData(afterDelay delayTime: TimeInterval) -> Void
self.perform(#selector(self.reloadData), with: nil, afterDelay: delayTime)
但它向我显示了一个错误:Ambiguous use of 'reloadData'
它的正确解决方案是什么?
这是带有错误消息的快照
【问题讨论】:
将您的方法名称更改为其他名称,例如 reloadDataWithDelay 并检查 如果延迟的目的是等待某个异步任务不要这样做。 @vadian,你是绝对正确的,我需要这个功能来达到同样的目的。我有一些动画操作,需要 tableview 等待几个时间间隔,以重新加载其数据。 【参考方案1】:重命名您的函数,因为它与 UITableView 的 reloadData()
冲突
//---------
extension UITableView
// Default delay time = 0.5 seconds
// Pass delay time interval, as a parameter argument
func reloadDataAfterDelay(delayTime: TimeInterval = 0.5) -> Void
self.perform(#selector(self.reloadData), with: nil, afterDelay: delayTime)
【讨论】:
【参考方案2】:我会使用块来解决这个问题,如下所示:
DispatchQueue.main.asyncAfter(deadline: DispatchTime.now() + delayTime) [weak self] in
self?.tableView.reloadData()
【讨论】:
【参考方案3】: extension UITableView
func reloadDataAfterDelay(delayTime: TimeInterval) -> Void
let when = DispatchTime.now() + delayTime
DispatchQueue.main.asyncAfter(deadline: when)
self.reloadData()
【讨论】:
你会想要一个[weak self]
在块的开头,否则这不会编译。
现在你已经删除了self?
这可能会导致内存泄漏【参考方案4】:
试试这个:
extension UITableView
func reloadDataWithDelay(delayTime: TimeInterval) -> Void
let delayTime = DispatchTime.now() + 2
DispatchQueue.main.asyncAfter(deadline: delayTime)
self.reloadData()
【讨论】:
'reloadData' 与其默认方法冲突以上是关于iOS - 延迟后的 UITableView reloadData的主要内容,如果未能解决你的问题,请参考以下文章
使用 Alamofire 在 UITableview 中延迟加载 API 请求