呼……今天一早就開車去郊區開會談項目,到下午才回到公司,完美的避開了午休,困死人。
下午寫代碼的時候需要寫cell的復選,這個功能以前有寫過,這次寫的時候準備記錄一下。
復選:
- 系統自帶的復選
UITableView有一個editing屬性,只要設置
tableView.editing = YES;
就可以進入tableView的編輯狀態。不過默認的是cell的刪除,需要實現
- (UITableViewCellEditingStyle)tableView:(UITableView*)tableView editingStyleForRowAtIndexPath:(NSIndexPath*)indexPath
{
return UITableViewCellEditingStyleDelete | UITableViewCellEditingStyleInsert;
}
才能進入cell的多選狀態。讓我們看一下效果:
QQ20170810-161735-HD.gif
注意
不要忘記設置:
tableView.allowsMultipleSelectionDuringEditing = YES;
并且不要設置:
cell.selectionStyle = NO;
不過系統自帶的比較有局限性,只能滿足基本需求,要是遇到風格特殊的cell,就需要我們自己寫代碼完成這個功能了。
2.自定義cell的復選
首先,我們需要在自定義的cell中多聲明幾個屬性:
@property (nonatomic, assign) BOOL isSelected; // 判斷選中狀態
@property (nonatomic, strong) UIButton *selectBtn; // 選中按鈕
@property (nonatomic, copy) SelectedBlock block; // 按鈕點擊的block
在cell.m中實現按鈕的點擊事件:
- (void)selectedBtnClick
{
_isSelected = !_isSelected;
// 根據選中狀態不同設置自定義圖片
_isSelected ? [_selectBtn setImage:[UIImage imageNamed:@"111"] forState:UIControlStateNormal] : [_selectBtn setImage:[UIImage imageNamed:@"222"] forState:UIControlStateNormal];
if (_block) {
_block(_isSelected);
}
}
接著,在ViewController.m中:
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
// ... 這里自行完成cell的代碼
cell.block = ^(BOOL isSelected) {
NSNumber *num = [NSNumber numberWithInteger:indexPath.row];
if (isSelected) {
[_indexArray containsObject:num] ? : [_indexArray addObject:num];
} else {
![_indexArray containsObject:num] ? : [_indexArray removeObject:num];
}
for (NSNumber *num in _indexArray) {
NSLog(@"%@", num);
}
};
return cell;
}
_indexArray是用來存放選中cell的行號的可變數組。如果需要存放更多的數據,可以創建model來存放,同時cell的block也可以進行傳值。
效果:
QQ20170810-165901.gif
cell的單選
單選的主要思路是存儲選中的cell的index,每點擊一個cell判斷是否已經選中,未選中則取消上一個cell的選中狀態,把剛選中的cell狀態改為已選中;已選中則直接取消選中狀態。
好困,代碼下次貼…