cell編輯功能,使用cell左側自帶勾選標記

要點:

  1. 在自定義cell類中重新 刷新方法。分別設置選中時圖標和未選中時圖標。代碼如下:
  • (void)setSelected:(BOOL)selected animated:(BOOL)animated {
    [super setSelected:selected animated:animated];
    for (UIView *v1 in self.subviews) {
    NSLog(@“cell.subview—%@”, v1);
    if ([v1 isKindOfClass:[UIControl class]]) {
    for (UIView *v2 in v1.subviews) {
    //NSLog(@“UITableViewCellEditControl.subview—%@”, v2);
    if ([v2 isKindOfClass:[UIImageView class]]) {
    UIImageView *imageView = (UIImageView *)v2;
    // imageView.tag = KTagValue;
    if (selected) {
    imageView.image = [UIImage imageNamed:@“offline_select”];
    }else {
    imageView.image = [UIImage imageNamed:@“offline_deselect”];
    }
    }
    }
    }
    }
    }

2.在列表頁面設置 tableView的代理方法:

/**

  • tableViewCell的相關屬性
    */
  • (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {

    static NSString *identifier = @“offlineSuccessCell”;
    MJKOfflineSuccessCell *cell = (MJKOfflineSuccessCell *)[tableView dequeueReusableCellWithIdentifier:identifier];
    if (!cell) {
    cell = [[MJKOfflineSuccessCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:identifier];
    }
    NSInteger rowNumber = indexPath.row;
    if (self.dataArray && self.dataArray.count > rowNumber) {
    MJKSuccessOfflineInfo *offlineInfo = [self.dataArray objectAtIndex:rowNumber];
    cell.leftTagImageView.image = [UIImage imageNamed:offlineInfo.imageStr];
    cell.messageLab.text = offlineInfo.messageStr;
    if (tableView.editing) {
    if (offlineInfo.isSelect) {
    // 選中
    [tableView selectRowAtIndexPath:indexPath animated:NO scrollPosition:UITableViewScrollPositionNone];
    }else {
    // 取消選中
    [tableView deselectRowAtIndexPath:indexPath animated:NO];
    }
    }
    }
    return cell;
    }

// tableViewCell的點擊事件,在這裏出來用戶點擊選中某一個cell事件。在這裏修改數據列表中對應cell數據的選中標記。

  • (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath{

    if (tableView.editing == YES) {
    NSInteger rowNumber = indexPath.row;
    if (self.dataArray && self.dataArray.count > rowNumber) {
    MJKSuccessOfflineInfo *offlineInfo = [self.dataArray objectAtIndex:rowNumber];
    offlineInfo.isSelect = YES;
    }
    }else {
    NSLog(@“now in normal mode”);
    }
    }

// tableViewCell的點擊事件,在這裏出來用戶點擊取消選中某一個cell事件。在這裏修改數據列表中對應cell數據的選中標記。

  • (void)tableView:(UITableView *)tableView didDeselectRowAtIndexPath:(NSIndexPath *)indexPath {
    if (tableView.editing == YES) {
    NSInteger rowNumber = indexPath.row;
    if (self.dataArray && self.dataArray.count > rowNumber) {
    MJKSuccessOfflineInfo *offlineInfo = [self.dataArray objectAtIndex:rowNumber];
    offlineInfo.isSelect = NO;
    }
    }else {
    NSLog(@“now in normal mode”);
    }
    }

  • (BOOL)tableView:(UITableView *)tableView canEditRowAtIndexPath:(NSIndexPath *)indexPath {
    // Return NO if you do not want the specified item to be editable.
    return YES;
    }

-(UITableViewCellEditingStyle)tableView:(UITableView *)tableView editingStyleForRowAtIndexPath:(NSIndexPath *)indexPath{
return UITableViewCellEditingStyleInsert|UITableViewCellEditingStyleDelete;
}

  1. 修改tableView是否編輯的按鈕事件,全選或全部取消選中事件

// 全選或全部取消選中事件

  • (void)selectOrDeselectAllOfflineCell:(BOOL)select {
    for (MJKSuccessOfflineInfo *info in self.dataArray) {
    info.isSelect = select;
    }
    [self.tableView reloadDataWithoutAnimation];
    }

// 編輯或取消編輯

  • (void)rightButtonAction:(id)sender {
    self.tableView.editing=!self.tableView.editing;
    if (self.tableView.editing) {
    // 修改按鈕顯示
    [self addCustomNavRigthItemWithTitle:@“取消” action:@selector(rightButtonAction:) target:self];
    // 取消所有選中標記
    [self selectOrDeselectAllOfflineCell:NO];
    }else {
    [self addCustomNavRigthItemWithTitle:@“編輯” action:@selector(rightButtonAction:) target:self];
    }
    // 刷新,從而更新選中狀態圖標狀態
    [self.tableViewreloadDataWithoutAnimation];
    }
    }
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章