来自不同部分的TableView单元格混淆了

时间:2017-07-19 11:03:08

标签: ios swift uitableview swift3

我正在尝试使用两个部分实现tableview。每个部分都有一种需要的单元格。

因此,第一节细胞被分类为PendingTVC 第二节单元格被子类化为ScheduledCell。

我实施了以下方法,但细胞混淆了。例如,如果第一部分有3个细胞,则第2部分中的前3个细胞具有混合标记,该标记与第1部分的前3个细胞相关。代码如下:

func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int
    {


        if arr != nil {
            if section == 0 {
                print("returning pending : \(pendingCount)")
                return pendingCount
            }
            else{
                print("returning scheduled count : \(scheduledCount)")
                return scheduledCount
            }
        }
        return 0

    }

    func tableView(_ tableView: UITableView, titleForHeaderInSection section: Int) -> String? {

        if section == 0 {
            return "Pending"
        }
        else{
            return "Scheduled"
        }

    }

    func tableView(_ tableView: UITableView, heightForHeaderInSection section: Int) -> CGFloat {
        return 50.0
    }

    func numberOfSections(in tableView: UITableView) -> Int {
        return 2
    }

    func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell
    {
        let data = arr![indexPath.row]
        if indexPath.section == 0 {
            if let cell = tableView.dequeueReusableCell(withIdentifier: "Pending") as? PendingTVC{
                PendingTVC.formattCell(cell: cell, data: data)
                cell.selectionStyle = .none;
                cell.delegate = self
                return cell
            }
        }
        else{
            if let cell = tableView.dequeueReusableCell(withIdentifier: "scheduledCell") as? ScheduledCell{
                print("cellforrowat in scheduledCell")
                ScheduledCell.formatCell(cell: cell, data: data)
                cell.selectionStyle = .none;
                return cell
            }
        }
        return UITableViewCell()
    }

2 个答案:

答案 0 :(得分:0)

您应该在部分条件中获取数据。如果您事先获取数据,则需要使用索引路径数据。

func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell
{       
    if indexPath.section == 0 {
        if let cell = tableView.dequeueReusableCell(withIdentifier: "Pending") as? PendingTVC{
            let data = pendingarr![indexPath.row] //access pending data here
            PendingTVC.formattCell(cell: cell, data: data)
            cell.selectionStyle = .none;
            cell.delegate = self
            return cell
        }
    }
    else{
        if let cell = tableView.dequeueReusableCell(withIdentifier: "scheduledCell") as? ScheduledCell{
            print("cellforrowat in scheduledCell")
            let data = scheduledarr![indexPath.row] // access scheduled arr here
            ScheduledCell.formatCell(cell: cell, data: data)
            cell.selectionStyle = .none;
            return cell
        }
    }
}

答案 1 :(得分:0)

您为两个部分使用相同的数据数组。

  

让data = arr![indexPath.row]

在这里,您可以看到引用indexPath.row作为数据数组中的索引。这意味着该部分无关紧要。你至少有两个选择......

  1. 创建一个二维数组,其中第一个索引值是您的部分,第二个是行。例如dataArray = [[test,test2,test3],[otherTest,otherTest2,otherTest3]]。这可以通过将您的行更改为:
      

    让data = arr![indexPath.section] [indexPath.row]

  2. 或 2.创建两个单独的数组...一个用于第1部分,一个用于第2部分。在相关检查中调用它们以获取部分。