1

我正在尝试在 tableview 单元格上显示复选标记,但复选标记有时只会出现,当我滚动时它会消失。

代码下方:

 
    func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell
    {
        let cell = tableView.dequeueReusableCellWithIdentifier("vvxxx12", forIndexPath: indexPath)
    
        // Configure the cell...
        
    cell.textLabel?.text = self.dataArray[indexPath.row] as? String //in dataArray values are stored
             

       if dataArray.containsObject(indexPath)
       {
            cell.accessoryType = .Checkmark
       }
       else {
            cell.accessoryType = .None
        }
       return cell
         }

        func tableView(tableView: UITableView, didSelectRowAtIndexPath indexPath: NSIndexPath) {
            if let cell = tableView.cellForRowAtIndexPath(indexPath) {
                if cell.accessoryType == .Checkmark {
                    cell.accessoryType = .None
                   
                } else {
                    cell.accessoryType = .Checkmark
                   
                }
            }    
        }

4

3 回答 3

1

只需在您的代码中进行以下更改以在滚动表格视图时保持对表格视图的复选标记

在此处输入图像描述

结果 :

在此处输入图像描述

它现在工作正常,有任何问题让我知道我一定会帮你解决的。享受..

于 2016-05-05T04:12:25.080 回答
1

对于 Swift 3,以下对我有用

func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
    yourtableView.cellForRow(at: indexPath as IndexPath)?.accessoryType = .checkmark
}

func tableView(_ tableView: UITableView, didDeselectRowAt indexPath: IndexPath) {
    yourtableView.cellForRow(at: indexPath as IndexPath)?.accessoryType = .none
}
于 2017-05-24T09:43:01.693 回答
0
cell.textLabel?.text = self.dataArray[indexPath.row] as? String

这表明dataArray包含字符串。

if dataArray.containsObject(indexPath)

这表明dataArray包含索引路径。这两个都不应该是真的。一个用于数据的数组是有意义的,另一个用于选择的行或要检查的行也有意义,但对于两者来说不是同一个数组。

可能发生的情况是:

  • 选择行 - 然后更新单元格以具有复选标记附件
  • 滚动表格并调用 cellForRowAtIndexPath - 绝不会dataArray包含索引路径,因此附件总是被清除。

您需要在选择行时更新模型,以存储所选行的索引路径,或更新模型对象上的选定标志。

于 2016-05-04T12:53:31.410 回答