gpt4 book ai didi

ios - 在 UITableView 中分页数据

转载 作者:行者123 更新时间:2023-11-30 13:41:45 26 4
gpt4 key购买 nike

我目前正在尝试创建一个 UITableView,当用户滚动它时加载数据。

基本上,我有一个包含大量记录的数据源。一次加载所有内容远远超出了可行的范围。所以我一次查询50条记录。

问题在于用户可以通过右侧的字母跳转到该列表的中间。例如,如果他们按“M”,我会将 50 条从“M”开始的记录加载到列表中。向下滚动将浏览 M,最终浏览 N、O 等。

当然,将数据附加到列表底部很常见,我可以轻松做到这一点。我无法找到引用,或者当用户向上滚动时是否已完成将 50 条记录附加到列表顶部。

例如,如果用户点击“M”。他们应该能够向上滚动并开始看到 L。我可以将数据附加到列表的开头,但问题在于滚动列表的延续。

到目前为止,如果不跳转列表或完全停止,我就无法让它工作。

有人可以向我指出一个干净利落地完成此操作的人吗?

最佳答案

好的,所以我找到了自己问题的答案。很抱歉这篇文章,但也许​​它会对其他人有所帮助,因为我在其他地方找不到答案的确切解决方案,至少在涉及 Swift 时是这样。

首先,我加载了 50 条以“M”开头的记录。 JSON 数据将返回这些记录的行号。我创建了 Int 变量“begin”和“end”,它们保留了我加载到数组中的行范围。我将 numberOfRowsInSection 设置为范围的“末尾”。这个数字明显多于我在数组中加载的行数,因此我必须根据该数组来调整如何加载行。简单代码片段:

var begin:Int?
var end:Int = 0

func onDataLoad() {
data = data + DataHandler.data!
begin = data[0].Row
end = begin! + 50
tableView.reloadData()

let count = tableView.indexPathsForVisibleRows!.count - 2
let indexPath = NSIndexPath(forRow: begin! + count, inSection: 0)
tableView.scrollToRowAtIndexPath(indexPath, atScrollPosition: UITableViewScrollPosition.None, animated: false)

loading = false
}

func onBackwardData(evt:Event) {
data = DataHandler.data! + data
begin = begin! - 50
tableView.reloadData()
loading = false
}

func onForwardData() {
end = end + 50
data = data + DataHandler.data!
tableView.reloadData()
loading = false
}

override func numberOfSectionsInTableView(tableView: UITableView) -> Int {
return 1
}


override func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
return end
}

override func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {

let cell = tableView.dequeueReusableCellWithIdentifier("UserCell", forIndexPath: indexPath) as! PulseListTableViewCell
let cellrow = indexPath.row - begin!
if cellrow >= 0 {
cell.name.text = data[cellrow].Name
}

return cell
}

override func tableView(tableView: UITableView, willDisplayCell cell: UITableViewCell, forRowAtIndexPath indexPath: NSIndexPath) {
row = indexPath.row
let count = tableView.indexPathsForVisibleRows!.count + 5
if(indexPath.row >= end - 5 && !loading)
{
loading = true
DataHandler.getUsers(end)
}
else if(indexPath.row <= begin! + count && begin! > 0 && !loading)
{
loading = true
var offset = begin! - 50

if offset < 0 {
offset = 0
}

DataHandler.getUsers(offset)
}
}

这段代码很粗糙,有一些硬编码的东西,需要调整才能处理到达列表的开头或结尾,但想法就在那里。抱歉,如果这是 iOS 世界中一个完全明显的解决方案/问题,但我是新手,认为它可能会有所帮助。

关于ios - 在 UITableView 中分页数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35486110/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com