通过插入新行来创建无限滚动效果

时间:2019-06-19 16:46:34

标签: swift uitableview uiscrollview

我有一个UITableView列出了api中的数据。

当前,这些响应以50个项目为一组。

为了支持“无限滚动”,我目前正在执行类似的操作

func tableView(_ tableView: UITableView, willDisplay cell: UITableViewCell, forRowAt indexPath: IndexPath) {
    if indexPath.row == items.count - 1 && !isPaginating {
        requestNextPage()
    }
}

requestNextPage完成后,我在视图模型上更新了数组,然后调用

func reloadTableView() -> Void {
    DispatchQueue.main.async {
        self.activity.stopAnimating()
        self.tableView?.reloadData()
    }
}

实质上是重新加载表,呈现requestNextPage添加到我的数组中的新行。

我不喜欢这种方法,因为它会导致整个表被重新加载,并且感觉有点......笨拙。

我本以为用insertRowsAtIndexPaths这样做可能会更好,但是我不确定如何实现这一目标。

我尝试过类似的

   var indexPaths = [IndexPath]()

        for i in self.items.count...self.items.count + feed.count {
            indexPaths.append(IndexPath(row: i, section: 0))
        }

        self.insertNewRows?(indexPaths)

我希望采用现有的行数items.count并添加新行feed.count,然后让我调用insertNewRows,这实际上在我看来触发了这一点

func insertRows(_ indexPaths: [IndexPath]) {
    tableView?.beginUpdates()
    tableView?.insertRows(at: indexPaths, with: .fade)
    tableView?.endUpdates()
}

是否可以在此庄园中创建无限滚动效果?我当前的方法会触发异常

  

由于未捕获的异常而终止应用程序   “ NSInternalInconsistencyException”,原因:“试图插入第50行   进入第0部分,但在第0部分之后只有50行   更新”

我使用的是Swift,因此难以遵循Objective C的答案,我宁愿不安装第三方库来处理此问题。

“重复”问题还建议使用7年未更新的库。

0 个答案:

没有答案