UITableView 保存选中状态的方式

三世轮回 提交于 2019-12-05 12:55:23

昨天看到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或者进出编辑模式都会清除选中状态

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!