如何在Swift的Table View中进行分页?
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何在Swift的Table View中进行分页?相关的知识,希望对你有一定的参考价值。
我是初学者,我从服务器获取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) {
}
}
我想你必须在服务器上添加一个“Count”键,以便一次发送你想要多少行,然后通过服务器数据查询来处理,你可以参考这个项目来获取swift https://github.com/MrAlek/PagedArray
你完全没问题,没有一点担心。 UITableViewDelegate
和UITableViewDataSource
已经是这些任务的超级高效协议。让我解释:
无论你是从你的API获得300或10000个项目,只要它只是文本,延迟不会下降(只有文本响应不会在带宽中占据足够的空间)。为什么是这样?因为UITableViewDelegate
已经为您组织了它们的显示。您不会一次显示所有300个项目,而是按照需求回收单元格并显示它们(当用户滚动时)。这是tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell
的唯一目的。当然,你需要至少有一个寄存器单元,并在上面提到的方法中使用tableView.dequeueReusableCell
。
至于你的imagePaths下载,这是事情变得有趣的地方。您可以通过多种方法实现这一目标,Apple最近甚至添加了一个名为UIPrefetchDataSource
的新代表,它可以让您更好地控制用户滚动时可能显示的单元格,以便您可以提前设置。然而,即使你决定采用更简单的方法,你仍然需要处理并发 - 用户不会只是在30-45秒内静止盯着你的屏幕等待图像显示以便继续滚动(应用程序像Instagram一样无法使用) - 。我强烈建议你通过article来解决这些令人敬畏的Andrea Prearo,解决所有这些问题。
以上是关于如何在Swift的Table View中进行分页?的主要内容,如果未能解决你的问题,请参考以下文章
ios 官网文档翻译—Create a Table View(swift)
为 UIViewController 设置 ViewController,使用 Table View,连接到 Swift 中的 Parse