2013-02-17 82 views
7

我经常需要表视图细胞设置为我使用下面的代码的初始选择的状态:选择一个表格视图细胞编程:selectRowAtIndexPath VS的setSelected

[self.tableView selectRowAtIndexPath:indexPath 
    animated:NO scrollPosition:UITableViewScrollPositionNone]; 
UITableViewCell *cell = [self.tableView cellForRowAtIndexPath:indexPath]; 
[cell setSelected:YES]; 
cell.accessoryType = UITableViewCellAccessoryCheckmark; 

我使用selectRowAtIndexPath:indexPathsetSelected:YES在同一时间,因为我不完全理解哪种方法是以编程方式选择单元格的首选方式。

我应该使用哪一个陈述,为什么?

回答

6

我相信你想使用的方法是selectRowAtIndexPath:animated:scrollPosition:。通常,您应该将单元状态的管理留给表视图。在选择的情况下,它将存储并维护一组选定的索引路径,因此在重新使用不同的单元格后,正确的行将保持选中状态。也没有必要调用这两种方法,它只是多余的。

+0

谢谢@Nicky!在使用'selectRowAtIndexPath:animated:scrollPosition:'后,我会重新加载表格并根据单元格的选择状态('isSelected')在'cellForRowAtIndexPath'中设置复选标记? – AlexR 2013-02-17 11:54:42

+0

嗯,我通常在一个单独的属性中存储带勾号的项目,感觉更加明确。因此,在'tableView:didSelectRowAtIndexPath:'中,您执行以下操作:重新加载两行,一行先选中标记,一位用户单击(没有动画),选择单击行(也没有动画),然后取消选择动画,一个很好的视觉效果。全部通过调用表视图的方法来完成。 – Nicky 2013-02-17 12:02:23

+0

需要额外选择,因为细胞在重新加载后会丢失。你可以在那里设置附件类型,没有重新加载/选择就可以,但是我不想复制单元配置逻辑的任何部分。谁知道,也许明天我会用花哨的自定义选项标记或其他疯狂的东西:) – Nicky 2013-02-17 12:07:26