当我想在手机上运行时,在我从detailViewController中来回切换后,没有为单元格分配复选标记。它们目前没有分配复选标记,因此我希望在单元格选中后为其分配复选标记。如果您知道这里发生了什么,请告诉我!感谢
override func tableView(tableView: UITableView, didSelectRowAtIndexPath indexPath: NSIndexPath) {
let cell = tableView.dequeueReusableCellWithIdentifier("Cell", forIndexPath: indexPath)
if cell.accessoryType == UITableViewCellAccessoryType.None
{
cell.accessoryType = UITableViewCellAccessoryType.Checkmark
}
}
答案 0 :(得分:1)
目前,您正在将新单元格出列,而不一定是所选单元格。但是,您应该持久化是否使用模型对象检查单元格,而不是在视图本身中保持状态。一旦细胞出列/重复使用,就不再选择它了。
例如,您有一组模型对象:
class YourObject {
var isSelected: Bool = false
}
var modelObjects: [YourObject] = []
在每个对象中都有一个属性,表示是否选择了对象,这将在didSelectRowAtIndexPath
内设置。
var object = self.modelObjects[indexPath.row]
object.isSelected = true
tableView.reloadRowsAtIndexPaths([indexPath], rowAnimation: .Automatic)
在cellForRowAtIndexPath
内,您可以检查模型对象上的属性是否被选中,如果是,则将单元格的accessoryType设置为.Checkmark。
var object = self.modelObjects[indexPath.row]
if object.isSelected {
cell.accessoryType .Checkmark
}
答案 1 :(得分:0)
问题是squash
使dequeueReusableCellWithIdentifier
当前未显示的单元格出列,它不会返回它在该索引路径上显示的单元格。
您要使用的是tableView
,如果cellForRowAtIndexPath
显示该索引路径,则会为您提供该单元格。
如果将tableView
设置为该单元格,则会更新可见单元格。
答案 2 :(得分:0)
您正在进行的方式是将新单元格出列,而不是更新正在选择的单元格。为了实现您的目标,您应该用let cell = tableView.dequeueReusableCellWithIdentifier("Cell", forIndexPath: indexPath)
替换let cell = tableView.cellForRowAtIndexPath(indexPath)
。
答案 3 :(得分:0)
我们必须处理'if'和'else'两者。
在'cellForRowAtIndexPath'中:
private var selectedIndex: Int = -1
if selectedIndex == indexPath.row
{
cell.accessoryType = UITableViewCellAccessoryType.Checkmark
}
else
{
cell.accessoryType == UITableViewCellAccessoryType.None
}