为什么这段代码不允许我在tableViewCell中放置一个复选标记附件?

时间:2016-05-03 15:04:53

标签: ios swift uitableview didselectrowatindexpath

当我想在手机上运行时,在我从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
    }

}

4 个答案:

答案 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
}