如何在我的函数中通过indexpath访问tableviewcell

时间:2016-07-03 23:13:51

标签: ios swift uitableview checkmark

我有一个tableview,我需要以某种方式保存以前检查过的那些。我已经保存了已经检查过数组的索引路径。现在我有下面的代码,我不知道如何定义" cell" (项目是NSindexpath)。 我已经尝试了这个但它返回nill并且不起作用:  let cell = super.tableView.cellForRowAtIndexPath(items)

override func viewWillAppear(animated: Bool) {

    for items in indexpatharray{
        if !indexpatharray.isEmpty{
        let cell = 

        cell!.accessoryType = UITableViewCellAccessoryType.Checkmark;
        cell!.selectionStyle = .None


    }

我已经尝试了这个,但它返回nill并且不起作用:     let cell = super.tableView.cellForRowAtIndexPath(items)

3 个答案:

答案 0 :(得分:1)

如果您需要访问单元格,可以尝试:

let cell = tableView.cellForRowAtIndexPath(indexPath)

答案 1 :(得分:0)

使用数据而不是单元格更好,一旦单元格被标记,您应该标记单元格后面的数据。当您需要知道哪个被标记时,您需要查找数据而不是单元格。

答案 2 :(得分:0)

此外,我不确定您是否可以在ViewWillAppear()中调用这些委托和数据源方法,但您不应该这样做。
如果你说你有一个已保存的indexPaths数组,那你可以做的是 - 将故事板中原型单元的附件类型设置为None。这会将所有单元格的默认附件设置为无。

在cellForRowAtIndexPath的dataSource方法中,将您的单元格定义为

`let cell = tableView.cellForRowAtIndexPath(indexPath)

if(array.contains(indexPath.row)){
   cell!.accessoryType = UITableViewCellAccessoryType.Checkmark;
}
`

在didSelectRowAtIndexPath的委托方法中(用于 - 这将存储您点击的单元格的indexPaths并在其附件类型中加上一个复选标记。只有当特定的indexPath已经存在时,它才会添加到数组中。 )

{
    let cell = tableView.cellForRowAtIndexPath(indexPath)
    tableView.deselectRowAtIndexPath(indexPath, animated: true)

    if(!(array.contains(indexPath.row))){
       cell!.accessoryType = UITableViewCellAccessoryType.Checkmark;
       array.append(indexPath.row)
    } else { //to flip the state from Checkmark to None
       cell!.accessoryType = UITableViewCellAccessoryType.None;
    }  
    tableView.deselectRowAtIndexPath(indexPath, animated: true)     
}

注意:只有在您不处理大型数据集时,这才是一种很好的方法。如果您是,那么我建议您查看Core Data和NSFetchResultsController。