如何允许用户每“n”秒刷新一次表?

Posted

技术标签:

【中文标题】如何允许用户每“n”秒刷新一次表?【英文标题】:How can I allow a user to only refresh a table every "n"th second? 【发布时间】:2018-12-14 05:00:20 【问题描述】:

我在我的表格视图中添加了一个UIRefreshControl,以便我可以允许用户拉动刷新。

他们不需要经常刷新它,只需要每 30 秒刷新一次。我怎样才能让他们每 30 秒才做一次?

@IBOutlet weak var tableView: UITableView!

private let refresher: UIRefreshControl = UIRefreshControl()

override func viewDidLoad() 
    super.viewDidLoad()

    //load Event data
    loadData()

    // Add Refresh Control to Table View
    tableView.refreshControl = refresher

    refresher.addTarget(self, action: #selector(refreshData(_:)), for: .valueChanged)
    refresher.attributedTitle = NSAttributedString(string: "Fetching events...")



@objc private func refreshData(_ sender: Any) 
    // Fetch Data
    loadData()



private func loadData() 
     //code here for grabbing data

【问题讨论】:

当你说 30 秒时,你的意思是他们第一次获取后 30 秒? 您想在 30 秒后刷新数据吗? 简单的技巧就是从tableview中删除UIRefreshControl,然后在第n秒后添加回tableview。 您可以使用Timer轻松做到这一点,看看***.com/a/43993602/4003548。 神奇的术语是:定时器。在“第一次”刷新设计时启动它以在每 30 秒后调用指定的方法。 【参考方案1】:

很简单;每次用户刷新时,您将 Date 存储在一个属性中,下一次,如果 30 秒还没有过去,您什么也不做。

【讨论】:

【参考方案2】:

不要移除刷新控件,否则会导致糟糕的用户体验

有几种选择,但我认为你可以通过这个实现它

在你的类中取一个全局变量

var start: CFAbsoluteTime = CFAbsoluteTimeGetCurrent()

并在refreshData方法检查

let elapsed = CFAbsoluteTimeGetCurrent() - start

如果它大于您所需的时间,您将获得秒数,然后触发 API,否则只需停止刷新控制并重新分配 start = CFAbsoluteTimeGetCurrent()

【讨论】:

以上是关于如何允许用户每“n”秒刷新一次表?的主要内容,如果未能解决你的问题,请参考以下文章

如何设置每 10 秒刷新一次位置的间隔?

如何能让浏览的网页每间隔几秒刷新一次

每 10 秒更新一次用户位置 - 从 mysql 获取位置

HTML 每3秒刷新一次浏览器

如何在 MVC 4 中每 3 秒刷新一次局部视图?

我需要每 30 秒刷新一次的 iframe(但不是整个页面)