iOS - 当用户到达滚动视图底部时加载项目

时间:2017-02-15 09:41:16

标签: ios uiscrollview swift3 cloudkit

我目前正在使用CloudKit作为我的后端,到目前为止,我一直非常喜欢它。

我发生了一个查询,它检索数据以填充表格视图。

由于我不知道它可能具有的项目数量,因此我将查询过滤为X个项目(让我们说15个)。

我的目标是当用户向下滚动到表格视图的底部(最后查询的项目)时查询后端以继续填充表格视图。

我已经搜索过但无法找到执行此操作的CloudKit代码。

有人可以给我一些关于如何做的提示吗?

谢谢大家的帮助。 最好,伊万。

1 个答案:

答案 0 :(得分:1)

在IOS上我认为你必须使用UITableViewController或只是UITableView。

将UIActivityIndi​​catorView(即微调器)添加到UITableViewController。将插座连接到代码:

@IBOutlet weak var spinner: UIActivityIndicatorView!

向您的UITableViewController添加一个属性,以跟踪您当前正在加载更多数据,这样您就不会尝试两次:

var loadingData = false

启动微调器动画,然后调用refreshRes():

func tableView(tableView: UITableView, willDisplayCell cell: UITableViewCell, forRowAtIndexPath indexPath: NSIndexPath) {
if !loadingData && indexPath.row == refreshPage - 1 {
    spinner.startAnimating()
    loadingData = true
    refreshRes()
}

让refreshRes()在后台线程上运行。这将使您的桌子仍然可以自由移动。动画微调器将告诉用户更多数据即将到来。查询返回后,更新主线程上的表数据。

func refreshRes() {
dispatch_async(dispatch_get_global_queue(QOS_CLASS_BACKGROUND, 0)) {
    // this runs on the background queue
    // here the query starts to add new 15 rows of data to arrays

    dispatch_async(dispatch_get_main_queue()) {
        // this runs on the main queue
        self.refreshPage += 15
        self.tableView.reloadData()
        self.spinner.stopAnimating()
        self.loadingData = false
    }
}

之后,取决于服务器结果,您必须发出请求以获取其他15个数据