UITableView 默认选中一(或多)行

默认选中一行或多行是一个常用的功能,但是在使用的时候经常会碰到各种问题,比如我们需要默认选中第一行,在viewDidLoad方法中,添加以下代码,

代码片段1
NSIndexPath *ip=[NSIndexPath indexPathForRow:0 inSection:0];  
[tableView selectRowAtIndexPath:ip animated:YES scrollPosition:UITableViewScrollPositionBottom];

在tableview:cellForRowAtIndex:的代理方法中添加如下代码:

代码片段2
cell.accessoryType = cell.selected ? UITableViewCellAccessoryTypeNone: UITableViewCellAccessoryTypeCheckMark;

之后,发现在界面上并未选中第一行。打印发现cell.selected是NO.
其实这里有一个误区:选中的并不是cell,而是table的indexPath。table有一个属性indexPathsForSelectedCell,是一个数组,里面装的是table选中的indexPath。只要在代码片段1之后任意位置,打印此属性,就会发现第一行已经被选中。理解了这个点,问题就好解决了。只要修改代码片段2为如下:

NSIndexPath *selectedIndexPath =[ [tableView indexPathsForSelectedCell] firstObject];

cell.accessoryType = cell.selected ? UITableViewCellAccessoryTypeNone: UITableViewCellAccessoryTypeCheckMark;

cell.accessoryType = indexPath ==selectedIndexPath  ? UITableViewCellAccessoryTypeNone: UITableViewCellAccessoryTypeCheckMark;

你可能感兴趣的:(UITableView 默认选中一(或多)行)