昨天看到UITableView中的属性
@property(nonatomic) BOOL allowsSelection;//是否允许选中cell,默认为YES
@property(nonatomic) BOOL allowsMultipleSelection;//是否允许多个选中cell
@property(nonatomic) BOOL allowsSelectionDuringEditing;//编辑状态下,是否允许选中cell
@property(nonatomic) BOOL allowsMultipleSelectionDuringEditing;//编辑状态下,是否能多选cell
这是两组属性
第一组表示普通状态在,是否允许选中cell,是否允许多个选中cell
第二组表示在编辑状态下,是否允许选中cell,是否允许多个选中cell
- (NSIndexPath *)indexPathForSelectedRow;//返回选中的path,如果是多选,则返回第一个
- (NSArray *)indexPathsForSelectedRows;//返回选择的path,多个
调用上述方法,
UITableView将返回选中的cell的path,或者path的数组
但是此时只能获得一个完全没有选中状态的UITableView
如果我们进入到一个UITableView,想要初始状态是部分选中,部分未选中,也就是按照我们的数据内容来动态设置的,那么我们应该对UITableViewCell做相应的设置
- (void)setSelected:(BOOL)selected animated:(BOOL)animated;
试着调用了此函数来设置cell的选中状态.
但是却没有效果,而且有时候被调用的cell背景会变得有点奇怪.....
调试发现,如果单纯的调用此函数,我们只是把cell的状态修改了,但是UITableView保存的状态没有修改.
UITableView会在cell创建完成后统一调用一次setSelected::函数设置cell的状态.
如此的话,那我们在cell里面修改cell状态的方式就不对了.
查看UITableView的API,发现此函数
- (void)selectRowAtIndexPath:(NSIndexPath *)indexPath animated:(BOOL)animated scrollPosition:(UITableViewScrollPosition)scrollPosition;
设置UITableView中cell的选中
在UITableViewCell创建完成之后调用此函数
如viewDidLoad:中,就可以将相应的cell设置成选中状态
到此,我们就可以使用UITableView中现有的数据结构来保存Cell的选中状态了
PS:reloadData或者进出编辑模式都会清除选中状态
来源:oschina
链接:https://my.oschina.net/u/811205/blog/175609