【问题标题】:how to make pagination in Table View in Swift?如何在 Swift 的表格视图中进行分页?
【发布时间】:2018-03-03 20:37:45
【问题描述】:

我是初学者,我从服务器获取 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


【解决方案1】:

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

【讨论】:

    【解决方案2】:

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

    无论您从 API 获取的项目是 300 条还是 10000 条,只要它只是文本,延迟就不会下降(只有文本响应不会占用那么大的带宽)。为什么是这样?因为UITableViewDelegate 已经为你组织好了它们的展示。您不会一次显示所有 300 个项目,而是会回收单元格并按需求显示它们(当用户滚动时)。这是tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell 的唯一目的。当然,您需要至少有一个注册单元,并在上述方法中使用tableView.dequeueReusableCell

    至于您的 imagePaths 下载,这就是有趣的地方。您可以通过多种方法实现这一点,Apple 最近甚至添加了一个名为 UIPrefetchDataSource 的新委托,它可以让您更好地控制用户滚动时可能显示哪些单元格,以便您可以提前进行设置.但是,即使您决定采用更简单的方法,您仍然需要处理并发问题 - 用户不会只是在 30-45 秒内静静地盯着您的屏幕等待图像显示以继续滚动(应用像 Instagram 将无法使用)-。我强烈建议您看看Andrea Prearo 解决所有这些问题的出色article

    【讨论】:

      猜你喜欢
      • 2018-06-02
      • 1970-01-01
      • 1970-01-01
      • 2011-05-25
      • 2020-05-25
      • 2011-10-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多