要點:
- 在自定義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;
}
- 修改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];
}
}