UITableView - 滚动时选择段时索引超出范围

时间:2018-01-04 07:41:47

标签: swift scroll tableview uisegmentedcontrol

在滚动Index out of range时更改cellForRowAt索引时,我在segmentedControl中收到“tableView”。

@IBAction func segmentedControlAction(_ sender: AnyObject!) {
        if(segmentedControl.selectedSegmentIndex == 0) {
            self.data?.removeAll()
            loadA()
        }
        else if(segmentedControl.selectedSegmentIndex == 1){
            self.data?.removeAll()
            loadB()
        }
    }

 override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {

        let cell = tableView.dequeueReusableCell(withIdentifier: "Cell") as! CustomCell

        cell.data = self.data?[indexPath.row] ---> Error here
        return cell
}

LoadA和LoadB是类似的功能

func loadA(){
        API.sharedInstance.loadA(start, callback:  { response in
            if let data = response["data"].arrayValue as [JSON]?{
                self.data = data
                DispatchQueue.main.async {
                    self.tableView?.reloadData()
                }
            }
        })
    }

1 个答案:

答案 0 :(得分:1)

您首先删除所有数据但不重新加载表。然后调用异步方法,稍后在后台更新数据,最后重新加载主队列上的表视图。

您只需在重新加载表格视图之前立即更新数据模型。

@IBAction func segmentedControlAction(_ sender: AnyObject!) {
    if(segmentedControl.selectedSegmentIndex == 0) {
        loadA()
    }
    else if(segmentedControl.selectedSegmentIndex == 1){
        loadB()
    }
}

func loadA(){
    API.sharedInstance.loadA(start, callback:  { response in
        if let data = response["data"].arrayValue as [JSON]?{
            DispatchQueue.main.async {
                self.data = data
                self.tableView?.reloadData()
            }
        }
    })
}