滚动以加载数据。 Swift。 UI表格视图
Scroll to load data. Swift. UITableView
我的代码在通过滚动 table 到某一行来加载数据时遇到了一些问题,但我找不到原因。
基本上,我希望 table 在滚动到总元素 - 5 时加载接下来的 10 个元素。例如,我希望 table 最初加载 10 个元素。然后,当它碰到第五个元素时,它加载 11-20 个元素。
我的问题是当我最初加载 table 时,它只加载前 5 个元素,但我可以看到 6-10 之间有一些空格,然后我将 table 滚动到第五个元素,它加载接下来的 10 个元素 (6 - 15)。
let rowPerPage = 10
func refreshResults(){
// append data from server //
self.resultsTitleArray.append(...)
if self.resultsTitleArray.count != 0 {
let minCount = min(rowPerPage, self.productImageArray.count) - 1
self.currentResultsTitleArray += self.resultsTitleArray[0...minCount]
}
self.resultsTable.reloadData()
}
func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int{
return currentResultsTitleArray.count
}
func tableView(tableView: UITableView, willDisplayCell cell: UITableViewCell, forRowAtIndexPath indexPath: NSIndexPath) {
let diff = rowPerPage - 5
let currentDiff = currentResultsTitleArray.count - 1 - indexPath.row
if currentResultsTitleArray.count != resultsTitleArray.count && diff == currentDiff {
let minCount = min(resultsTitleArray.count, currentResultsTitleArray.count + rowPerPage as Int) - 1
let next = self.currentResultsTitleArray.count
self.currentResultsTitleArray += self.resultsTitleArray[next...minCount]
resultsTable.reloadData()
}
}
就我个人而言,我会略微更改此 if
语句。您想要做的是在距离底部仅 5 时加载 10 个单元格。但它有点危险,因为它可能轻松加载多次。
您需要一个外部 var
来显示您迄今为止完成的最高成功负载并检查
if indexPath.row == currentResultsTitleArray.count - 6 && indexPath.row > self.highestIndexFetchedOn
应该是触发器,然后在成功获取后,就在重新加载数据之前,将 self.highestIndexFetchedOn
设置为新的 indexPath.row
不清楚 rowPerPage
做了什么,但我猜它是 10
而且 minCount
逻辑看起来是正确的,但我会打印出来以确保你'重新得到你所期望的。
if indexPath.row == currentResultsTitleArray.count - 4 && indexPath.row > self.highestIndexFetchedOn {
let minCount = min(resultsTitleArray.count, currentResultsTitleArray.count + rowPerPage as Int) - 1
let next = self.currentResultsTitleArray.count
print("Count:",minCount)
self.currentResultsTitleArray += self.resultsTitleArray[next...minCount]
// etc...
self.highestIndexFetchedOn = indexPath.row
tableView.reloadData()
}
我不确定这里的数据结构,所有这些数组都包含不同的数据......我认为一个包含所有值的字典数组会更好,并简化我们正在看的内容.. 但我不能说 100% 没有看到 class 的其余部分..
我的代码在通过滚动 table 到某一行来加载数据时遇到了一些问题,但我找不到原因。
基本上,我希望 table 在滚动到总元素 - 5 时加载接下来的 10 个元素。例如,我希望 table 最初加载 10 个元素。然后,当它碰到第五个元素时,它加载 11-20 个元素。
我的问题是当我最初加载 table 时,它只加载前 5 个元素,但我可以看到 6-10 之间有一些空格,然后我将 table 滚动到第五个元素,它加载接下来的 10 个元素 (6 - 15)。
let rowPerPage = 10
func refreshResults(){
// append data from server //
self.resultsTitleArray.append(...)
if self.resultsTitleArray.count != 0 {
let minCount = min(rowPerPage, self.productImageArray.count) - 1
self.currentResultsTitleArray += self.resultsTitleArray[0...minCount]
}
self.resultsTable.reloadData()
}
func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int{
return currentResultsTitleArray.count
}
func tableView(tableView: UITableView, willDisplayCell cell: UITableViewCell, forRowAtIndexPath indexPath: NSIndexPath) {
let diff = rowPerPage - 5
let currentDiff = currentResultsTitleArray.count - 1 - indexPath.row
if currentResultsTitleArray.count != resultsTitleArray.count && diff == currentDiff {
let minCount = min(resultsTitleArray.count, currentResultsTitleArray.count + rowPerPage as Int) - 1
let next = self.currentResultsTitleArray.count
self.currentResultsTitleArray += self.resultsTitleArray[next...minCount]
resultsTable.reloadData()
}
}
就我个人而言,我会略微更改此 if
语句。您想要做的是在距离底部仅 5 时加载 10 个单元格。但它有点危险,因为它可能轻松加载多次。
您需要一个外部 var
来显示您迄今为止完成的最高成功负载并检查
if indexPath.row == currentResultsTitleArray.count - 6 && indexPath.row > self.highestIndexFetchedOn
应该是触发器,然后在成功获取后,就在重新加载数据之前,将 self.highestIndexFetchedOn
设置为新的 indexPath.row
不清楚 rowPerPage
做了什么,但我猜它是 10
而且 minCount
逻辑看起来是正确的,但我会打印出来以确保你'重新得到你所期望的。
if indexPath.row == currentResultsTitleArray.count - 4 && indexPath.row > self.highestIndexFetchedOn {
let minCount = min(resultsTitleArray.count, currentResultsTitleArray.count + rowPerPage as Int) - 1
let next = self.currentResultsTitleArray.count
print("Count:",minCount)
self.currentResultsTitleArray += self.resultsTitleArray[next...minCount]
// etc...
self.highestIndexFetchedOn = indexPath.row
tableView.reloadData()
}
我不确定这里的数据结构,所有这些数组都包含不同的数据......我认为一个包含所有值的字典数组会更好,并简化我们正在看的内容.. 但我不能说 100% 没有看到 class 的其余部分..