我在查看自定义单元格时遇到问题。 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")
自定义单元格功能:
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
我很困惑。
答案 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
}