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

问题描述 投票:1回答:2

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

我应该这样做,因为其中一个数据实际上是一个imagePath,所以我会下载一个图像,如果我一次下载所有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) {



    }



}
ios swift uitableview pagination
2个回答
0
投票

我想你必须在服务器上添加一个“Count”键,以便一次发送你想要多少行,然后通过服务器数据查询来处理,你可以参考这个项目来获取swift https://github.com/MrAlek/PagedArray


0
投票

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

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

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

© www.soinside.com 2019 - 2024. All rights reserved.