中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

iOS 多選刪除功能附tableViewTips及單選刪除

發布時間:2020-09-18 16:49:58 來源:腳本之家 閱讀:156 作者:王隆帥 欄目:移動開發

一、前言

這次分享并記錄一下tableView的多選刪除,并額外記錄一下單選刪除及tableView的設置小技巧。

二、想要實現的效果圖如下:

1、先上原圖

iOS 多選刪除功能附tableViewTips及單選刪除

2、然后編輯圖如下:

iOS 多選刪除功能附tableViewTips及單選刪除

3、編輯步驟:

點擊右上角按鈕編輯,界面呈現編輯狀態底部刪除按鈕彈出

選擇刪除cell項,點擊右下角刪除可刪除

點擊右上角,退出編輯狀態,底部刪除按鈕退出界面

三、多選刪除核心代碼

1、設置允許tableView編輯狀態下允許多選

_mainTableView.allowsMultipleSelectionDuringEditing = YES;

2、將cell設置為可選擇的風格(下面代碼是在自定義Cell內部)

self.selectionStyle = UITableViewCellSelectionStyleDefault;

說明:因為自認為系統的選中狀態很難看,所以在cell的基類里已經把 selectionStyle 設置為None,但是想要多選必須將其打開,大家切記。

3、不喜歡系統的選中狀態,可更改選中狀態的背景(下面也是在自定義cell內部)

 UIView *view = [[UIView alloc] init];
 view.backgroundColor = UIColorFromRGB(0xF6F6F6);
 self.selectedBackgroundView = view;

4、右上角點擊事件

 [self.viewModel.rightViewModel.clickSubject subscribeNext:^(id x) {
    @strongify(self);
    if (self.mainTableView.editing) {
      self.viewModel.rightViewModel.title = @"編輯";
      [UIView animateWithDuration:0.5 animations:^{
        [self.mainTableView mas_remakeConstraints:^(MASConstraintMaker *make) {
          @strongify(self);
          make.edges.equalTo(self);
        }];
      }];
    } else {
      self.viewModel.rightViewModel.title = @"確定";
      [UIView animateWithDuration:0.5 animations:^{
        [self.mainTableView mas_remakeConstraints:^(MASConstraintMaker *make) {
          @strongify(self);
          make.left.right.top.equalTo(self);
          make.bottom.equalTo(-50);
        }];
      }];
    }
    [self.mainTableView setEditing:!self.mainTableView.editing animated:YES];
  }];

5、右下角刪除事件

 [[[self.deleteBtn rac_signalForControlEvents:UIControlEventTouchUpInside] takeUntil:self.rac_willDeallocSignal] subscribeNext:^(id x) {
     @strongify(self);
    NSMutableArray *deleteArray = [NSMutableArray array];
    for (NSIndexPath *indexPath in self.mainTableView.indexPathsForSelectedRows) {
      [deleteArray addObject:self.viewModel.dataArray[indexPath.row]];
    }
    NSMutableArray *currentArray = self.viewModel.dataArray;
    [currentArray removeObjectsInArray:deleteArray];
    self.viewModel.dataArray = currentArray;
    [self.mainTableView deleteRowsAtIndexPaths:self.mainTableView.indexPathsForSelectedRows withRowAnimation:UITableViewRowAnimationLeft];//刪除對應數據的cell
    dispatch_time_t delayTime = dispatch_time(DISPATCH_TIME_NOW, (int64_t)(1.0 * NSEC_PER_SEC));
    dispatch_after(delayTime, dispatch_get_main_queue(), ^{
      @strongify(self);
      [self.mainTableView reloadData];
    });
  }];

四、單個刪除(分為系統左滑,和點擊cell上刪除按鈕兩種)

1、系統左滑

#pragma mark - delete
- (UITableViewCellEditingStyle)tableView:(UITableView *)tableView editingStyleForRowAtIndexPath:(NSIndexPath *)indexPath {
  return UITableViewCellEditingStyleDelete;
}
- (NSString *)tableView:(UITableView *)tableView titleForDeleteConfirmationButtonForRowAtIndexPath:(NSIndexPath *)indexPath {
  return @"刪除此經驗";
}
- (void)tableView:(UITableView *)tableView commitEditingStyle:(UITableViewCellEditingStyle)editingStyle forRowAtIndexPath:(NSIndexPath *)indexPath {
  [self.viewModel.deleteCommand execute:indexPath];
}

說明:刪除操作數據及UI刷新和多選是一致的,就不上代碼了,這里只需注意左滑需要遵循的系統代理就行。

2、點擊Cell刪除

與系統左滑刪除的不同僅僅是手動觸發刪除事件而已。

  [[[self.deleteBtn rac_signalForControlEvents:UIControlEventTouchUpInside] takeUntil:self.rac_prepareForReuseSignal] subscribeNext:^(id x) {
    [viewModel.deleteCommand execute:nil];
  }];

單個刪除的操作數據和UI刷新也上下代碼吧!(雖然有些重復o(╯□╰)o)

 [[self.viewModel.deleteSubject takeUntil:self.rac_willDeallocSignal] subscribeNext:^(NSIndexPath *indexPath) {
    @strongify(self);
    if (self.viewModel.dataArray.count > indexPath.row) {
      [self.viewModel.dataArray removeObjectAtIndex:indexPath.row]; //刪除數組里的數據
      [self.mainTableView deleteRowsAtIndexPaths:[NSMutableArray arrayWithObject:indexPath] withRowAnimation:UITableViewRowAnimationLeft];//刪除對應數據的cell
      dispatch_time_t delayTime = dispatch_time(DISPATCH_TIME_NOW, (int64_t)(1.0 * NSEC_PER_SEC));
      dispatch_after(delayTime, dispatch_get_main_queue(), ^{
         @strongify(self);
         [self.mainTableView reloadData];
      });
    }
  }];

五、tableView的一些Tips(不常用的,或沒注意的)

1、設置tableView可不可以選中(防止cell重復點擊也可以利用這條特性)

self.tableView.allowsSelection = NO;

2、允許tableview多選

self.tableView.allowsMultipleSelection = YES;

3、編輯模式下是否可以選中

self.tableView.allowsSelectionDuringEditing = NO;

4、編輯模式下是否可以多選

self.tableView.allowsMultipleSelectionDuringEditing = YES;

5、獲取被選中的所有行

[self.tableView indexPathsForSelectedRows]

6、獲取當前可見的行

[self.tableView indexPathsForVisibleRows];

7、 改變UITableViewCell選中時背景色

cell.selectedBackgroundView.backgroundColor

8、自定義UITableViewCell選中時背景

cell.selectedBackgroundView

9、自定義UITableViewCell選中時系統label字體顏色

cell.textLabel.highlightedTextColor

10、設置tableViewCell間的分割線的顏色

[theTableView setSeparatorColor:[UIColor xxxx ]];

11、pop返回table時,cell自動取消選中狀態(在viewWillAppear中添加如下代碼)

[self.tableView deselectRowAtIndexPath:[self.tableView indexPathForSelectedRow] animated:YES];

12、點擊后,過段時間cell自動取消選中

 - (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath {
  //消除cell選擇痕跡
  [self performSelector:@selector(deselect) withObject:nil afterDelay:0.5f];
}
- (void)deselect {
  [self.tableview deselectRowAtIndexPath:[self.tableview indexPathForSelectedRow] animated:YES];
}

以上所述是小編給大家介紹的AniOS 多選刪除功能附tableViewTips及單選刪除,希望對大家有所幫助,如果大家有任何疑問請給我留言,小編會及時回復大家的。在此也非常感謝大家對億速云網站的支持!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

贞丰县| 蒙山县| 开阳县| 南阳市| 施秉县| 余庆县| 永城市| 许昌市| 莱阳市| 巴林左旗| 永康市| 洪湖市| 禹城市| 南开区| 图片| 普格县| 扬州市| 白沙| 宜丰县| 深州市| 罗田县| 基隆市| 安阳市| 洛川县| 五大连池市| 瓦房店市| 崇信县| 黎川县| 武平县| 惠来县| 平定县| 新平| 盐城市| 塔河县| 肥东县| 方城县| 池州市| 浦城县| 河间市| 若羌县| 雷山县|