麻烦的重载部分,UITableView中包含更多数据

时间:2018-08-21 19:25:05

标签: ios swift uitableview

我正在构建一个应用程序,该应用程序可以显示公共汽车的发车情况。我使用表格视图来表示它,将公共汽车站的名称设置为节标题,并且节中的每一行都代表该公共汽车站的偏离。

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的数据源?

0 个答案:

没有答案