我正在构建一个应用程序,该应用程序可以显示公共汽车的发车情况。我使用表格视图来表示它,将公共汽车站的名称设置为节标题,并且节中的每一行都代表该公共汽车站的偏离。
API始终为我提供每个停靠点的下20个起点,但最初我仅在每个部分中显示接下来的6个起点,但是我将所有20个起点保留在数据源中。在每个部分的末尾,我都有一个单元格,该单元格应该使每个部分中所示的距离增加一倍。这样做是这样的:
tableView.beginUpdates()
tableView.reloadSections(NSIndexSet(index: indexPath.section) as IndexSet, with: .none)
tableView.endUpdates()
最初的想法是,对于特定部分,我可以将numberOfRowsInSection
函数的返回值加倍,但这似乎行不通。
var scale = [Int : Int]()
func numberOfSections(in tableView: UITableView) -> Int {
if stops.count != nil {
return stops.count
} else {
return 1
}
}
func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
return stops[indexPath.row].departures.count - scale[stops[section].id]
}
func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
if stops != nil {
let currentDeparture = stops[(indexPath as NSIndexPath).section].departures![(indexPath as NSIndexPath).row]
let cell = tableView.dequeueReusableCell(withIdentifier: "cell", for: indexPath) as! DepartureTableViewCell
// Configuration of the cell
return cell
}
}
return UITableViewCell()
}
func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
if indexPath.row == (stops[indexPath.row].departures.count)! {
var currentScale = scale[stops[indexPath.section].id]
scale[stops[indexPath.section].id] = currentScale - 6
tableView.beginUpdates()
tableView.reloadSections(NSIndexSet(index: indexPath.section) as IndexSet, with: .none)
tableView.endUpdates()
}
}
字典scale
只是将停靠站的ID映射到应该显示的出发点数量,从14(20-6)开始,并且每次点击应该重新加载该部分的像元时, ,它减少了6。因此,在给定的部分中,我们还有6个离开。 currentDepartureresInSection
是特定站点的出发数量。
可以这样做,还是我必须更新tableview的数据源?