如何在Swift的Table View中进行分页?

时间:2018-03-03 09:09:41

标签: ios swift uitableview pagination

我是初学者,我从服务器获取300个数据并将此数据存储在数组[[String:String]]中,我不希望所有这300个数据同时显示在表视图中,但是我想要以递增方式显示它,假设在表视图中每个滚动15个数据,加载15个数据后,如果用户到达表视图滚动的底部,则将加载下一个15个。

我应该这样做,因为其中一个数据实际上是一个imagePath,所以我会下载一个Image,如果我一次下载所有300个图像,将花费太多时间。

我试过了,但我无法得到我想要的东西。我简化这种情况只是使用像下面的代码一样的整数数组。你能帮我怎么做吗?在此先感谢:)

class ViewController2: UIViewController {

    @IBOutlet weak var tableView: UITableView!


    var data = [Int]()



    override func viewDidLoad() {
        super.viewDidLoad()

        tableView.dataSource = self

        for i in 0...300 {
            data.append(i)
        }

    }


}



extension ViewController2 : UITableViewDataSource {

    func numberOfSections(in tableView: UITableView) -> Int {
        return 1
    }


    func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {


        return

    }

    func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
        let cell = UITableViewCell(style: .default, reuseIdentifier: nil)

        cell.textLabel?.text = "\(data[indexPath.row])"

        return cell
    }


    func tableView(_ tableView: UITableView, willDisplay cell: UITableViewCell, forRowAt indexPath: IndexPath) {



    }



}

2 个答案:

答案 0 :(得分:0)

我认为你必须添加" Count"在服务器上发送你想要一次多少行,然后它由服务器数据查询处理,你可以参考这个项目的swift https://github.com/MrAlek/PagedArray

答案 1 :(得分:0)

你完全没问题,没有一点担心。 UITableViewDelegateUITableViewDataSource已经是这些任务的超级高效协议。让我解释一下:

无论您从API中获得300或10,000件物品,只要它是唯一的文字,延迟就不会下降(只有文字回复?&# 39;在带宽中占据足够的空间)。为什么是这样?因为UITableViewDelegate已经为您组织了它们的显示。您不会一次显示所有300个项目,而是按照需求回收单元格并显示它们(当用户滚动时)。这是tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell的唯一目的。当然,您需要至少有一个寄存器单元,并在上述方法中使用tableView.dequeueReusableCell

至于你的imagePaths下载,这是事情变得有趣的地方。您可以通过多种方法实现这一目标,Apple最近甚至添加了一个名为UIPrefetchDataSource的新代理,它可以让您更好地控制用户滚动时可能显示的单元格,以便您可以进行设置提前。然而,即使你决定采用更简单的方法,你仍然需要处理并发 - 用户不会在30-45秒内静止盯着你的屏幕等待图像显示以便继续滚动(像 Instagram 这样的应用程序将无法使用) - 。我强烈建议您通过article来解决所有这些问题。{/ p>