我的单元格中有一个图像视图,显示一个复选标记图标。
我想要做的是当您触摸单元格时,应该出现复选标记。我得到了这个工作,但我现在的问题是我无法删除上一个选定单元格的复选标记。 - 只能选择一个单元格。
我试图让这个工作在didSelectRowAtIndexPath
,但我无法做到正确,所以我现在被困住了。
更新
var selectedRow: NSIndexPath?
func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {
var cell: searchCityTableViewCell!
if (indexPath.section == 0) {
cell = tableView.dequeueReusableCellWithIdentifier("staticCityCell") as! searchCityTableViewCell
cell.titleLabel?.text = "Within \(stateName)"
}else if (indexPath.section == 1) {
cell = tableView.dequeueReusableCellWithIdentifier("cityCell") as! searchCityTableViewCell
let state = cities[indexPath.row]
cell.configureWithStates(state)
if indexPath == selectedRow {
cell.cityImage.select()
} else {
cell.cityImage.deselect()
}
}
return cell
}
func tableView(tableView: UITableView, didSelectRowAtIndexPath indexPath: NSIndexPath)
{
let paths:[NSIndexPath]
if let previous = selectedRow {
paths = [indexPath, previous]
} else {
paths = [indexPath]
}
selectedRow = indexPath
tableView.reloadRowsAtIndexPaths(paths, withRowAnimation: .None)
}
答案 0 :(得分:4)
跟踪当前选择的行。向ViewController添加属性:
var selectedRow: NSIndexPath?
在didSelectRowAtIndexPath
:
let paths:[NSIndexPath]
if let previous = selectedRow {
paths = [indexPath, previous]
} else {
paths = [indexPath]
}
selectedRow = indexPath
tableView.reloadRowsAtIndexPaths(paths, withRowAnimation: .None)
在cellForRowAtIndexPath
:
if indexPath == selectedRow {
// set checkmark image
} else {
// set no image
}
需要注意的重要一点是,选择哪一行的状态应存储在模型中,而不是存储在单元格中。该表应反映模型的状态。在这种情况下,模型可以只是所选行的indexPath
。更新模型后(设置selectedRow
),受影响的行应重新加载其状态。