我有一个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)
答案 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。