默認(rèn)選中一行或多行是一個常用的功能远搪,但是在使用的時候經(jīng)常會碰到各種問題近尚,比如我們需要默認(rèn)選中第一行爵憎,在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;
之后,發(fā)現(xiàn)在界面上并未選中第一行也搓。打印發(fā)現(xiàn)cell.selected是NO.
其實(shí)這里有一個誤區(qū):選中的并不是cell赏廓,而是table的indexPath。table有一個屬性indexPathsForSelectedCell
,是一個數(shù)組傍妒,里面裝的是table選中的indexPath幔摸。只要在代碼片段1之后任意位置,打印此屬性拍顷,就會發(fā)現(xiàn)第一行已經(jīng)被選中抚太。理解了這個點(diǎn),問題就好解決了昔案。只要修改代碼片段2為如下:
NSIndexPath *selectedIndexPath =[ [tableView indexPathsForSelectedCell] firstObject];
cell.accessoryType = cell.selected ? UITableViewCellAccessoryTypeNone: UITableViewCellAccessoryTypeCheckMark;
cell.accessoryType = indexPath ==selectedIndexPath ? UITableViewCellAccessoryTypeNone: UITableViewCellAccessoryTypeCheckMark;