UITableView 保存選中狀態的方式

昨天看到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 atom

若是咱們進入到一個UITableView,想要初始狀態是部分選中,部分未選中,也就是按照咱們的數據內容來動態設置的,那麼咱們應該對UITableViewCell作相應的設置 spa

- (void)setSelected:(BOOL)selected animated:(BOOL)animated;
試着調用了此函數來設置cell的選中狀態.

可是卻沒有效果,並且有時候被調用的cell背景會變得有點奇怪..... 調試

調試發現,若是單純的調用此函數,咱們只是把cell的狀態修改了,可是UITableView保存的狀態沒有修改. code

UITableView會在cell建立完成後統一調用一次setSelected::函數設置cell的狀態. ip

如此的話,那咱們在cell裏面修改cell狀態的方式就不對了. it

查看UITableView的API,發現此函數 io

- (void)selectRowAtIndexPath:(NSIndexPath *)indexPath animated:(BOOL)animated scrollPosition:(UITableViewScrollPosition)scrollPosition;
設置UITableView中cell的選中

在UITableViewCell建立完成以後調用此函數

如viewDidLoad:中,就能夠將相應的cell設置成選中狀態

到此,咱們就能夠使用UITableView中現有的數據結構來保存Cell的選中狀態了

PS:reloadData或者進出編輯模式都會清除選中狀態

相關文章
相關標籤/搜索