UITableViewCell的復選與單選

呼……今天一早就開車去郊區開會談項目,到下午才回到公司,完美的避開了午休,困死人。

下午寫代碼的時候需要寫cell的復選,這個功能以前有寫過,這次寫的時候準備記錄一下。

復選:
  1. 系統自帶的復選
    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狀態改為已選中;已選中則直接取消選中狀態。
好困,代碼下次貼…

拋磚引玉獻丑了。

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容