自定义表格单元格:更改的标签不显示

时间:2017-11-03 10:51:04

标签: swift uitableview cell

我在查看自定义单元格时遇到问题。 cellForRowAt indexPath:似乎有效,但其中一个标签没有改变。

代码非常简单。请注意print语句和下面的输出。

func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
    let cell = tableView.dequeueReusableCell(withIdentifier: "taskCell", for: indexPath) as! SelectGroupCell

    var grData: (Desc: String, Sel: Bool) =  (Desc: "", Sel: false)
    if indexPath.section == 0 {
        grData = groupTable[EKEntityType.event]![indexPath.row]
    } else {
        grData = groupTable[EKEntityType.reminder]![indexPath.row]
    }

    cell.loadCell(Desc: grData.Desc, Sel: grData.Sel)

    print ("\(cell.lblSelected.text) : \(cell.lblDescription.text)")

    return cell
}

打印输出:

Optional("O") : Optional("US Holidays") 
Optional("+") : Optional("Calendar") 
Optional("O") : Optional("Birthdays")
Optional("+") : Optional("New List Test")
Optional("O") : Optional("Reminders")

模拟器屏幕打印: Notice the labels before the description are wrong.

自定义单元格功能:

func loadCell(Desc: String, Sel: Bool) {
    lblDescription.text = Desc

    if Sel {
        lblSelected.text = "+"
    } else {
        lblSelected.text = "O"
    }

}

在loadCell中重新运行打印

loadCell: O : US Holidays
display cell: O : US Holidays
loadCell: + : Calendar
display cell: + : Calendar
loadCell: O : Birthdays
display cell: O : Birthdays
loadCell: + : Reminders
display cell: + : Reminders
loadCell: O : New List Test
display cell: O : New List Test

我很困惑。

1 个答案:

答案 0 :(得分:0)

我明白了,但不明白为什么。

我删除了单元格逻辑中的SetSelect函数:

override func setSelected(_ selected: Bool, animated: Bool) {
    super.setSelected(selected, animated: animated)
    if selected {
        lblSelected.text = "+"
    } else {
        lblSelected.text = "O"
    }

}

然后我更改了表逻辑中的didSelectRow并重新加载了表。

func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {

    if indexPath.section == 0 {
        groupTable[EKEntityType.event]![indexPath.row].Sel = true
    } else {
        groupTable[EKEntityType.reminder]![indexPath.row].Sel = true
    }

    tableView.reloadData()

}

然后cell.LoadCell逻辑工作:

func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
    let cell = tableView.dequeueReusableCell(withIdentifier: "taskCell", for: indexPath) as! SelectGroupCell

    var grData: (Desc: String, Sel: Bool) =  (Desc: "", Sel: false)
    if indexPath.section == 0 {
        grData = groupTable[EKEntityType.event]![indexPath.row]
    } else {
        grData = groupTable[EKEntityType.reminder]![indexPath.row]
    }

    cell.loadCell(Desc: grData.Desc, Sel: grData.Sel)

    return cell
}