一 cell数据刷新之全局刷新
[self.tableView reloadData]
Wine *newWine = [[XMGWine alloc] init];
newWine.name = @"五粮液";
newWine.image = @"xx";
newWine.money = @"630";
[self.wines insertObject:newWine atIndex:0];
[self.tableView reloadData];
[self.wines removeObjectAtIndex:0];
[self.tableView reloadData];
NSIndexPath *indexPath = [self.tableView indexPathForSelectedRow]
Wine *wine = self.wines[indexPath.row]
wine.name = @"好酒"
wine.money = @"60"
// 2.刷新
[self.tableView reloadData]
二 cell数据刷新之局部刷新
[self.tableView reloadRowsAtIndexPaths:@[
[NSIndexPath indexPathForRow:0 inSection:0],
[NSIndexPath indexPathForRow:1 inSection:0]
]
withRowAnimation:UITableViewRowAnimationLeft];
[self.tableView insertRowsAtIndexPaths:@[
[NSIndexPath indexPathForRow:0 inSection:0],
[NSIndexPath indexPathForRow:1 inSection:0]
]
withRowAnimation:UITableViewRowAnimationLeft];
[self.tableView deleteRowsAtIndexPaths:@[
[NSIndexPath indexPathForRow:0 inSection:0],
[NSIndexPath indexPathForRow:1 inSection:0]
]
withRowAnimation:UITableViewRowAnimationLeft];
- 数据刷新的原则
- 通过修改模型数据,来修改tableView的展示
- 不要直接修改cell上面子控件的属性
三 左滑删除
- 遵守协议 – UITableViewDelegate
- 点击了“左滑出现的Delete按钮”会调用这个方法
- (void)tableView:(UITableView *)tableView commitEditingStyle:(UITableViewCellEditingStyle)editingStyle forRowAtIndexPath:(NSIndexPath *)indexPath
{
[self.wineArray removeObjectAtIndex:indexPath.row];
[tableView deleteRowsAtIndexPaths:@[indexPath] withRowAnimation:UITableViewRowAnimationLeft];
}
- (NSString *)tableView:(UITableView *)tableView titleForDeleteConfirmationButtonForRowAtIndexPath:(NSIndexPath *)indexPath
{
return @"删除";
}
-(NSArray*)tableView:(UITableView *)tableView editActionsForRowAtIndexPath:(NSIndexPath *)indexPath
{
UITableViewRowAction *action0 = [UITableViewRowAction rowActionWithStyle:UITableViewRowActionStyleNormal title:@"关注" handler:^(UITableViewRowAction * action, NSIndexPath * indexPath) {
NSLog(@"点击了关注");
tableView.editing = NO;
}];
UITableViewRowAction *action1 = [UITableViewRowAction rowActionWithStyle:UITableViewRowActionStyleDefault title:@"删除" handler:^(UITableViewRowAction * action, NSIndexPath * indexPath) {
[self.wineArray removeObjectAtIndex:indexPath.row];
[tableView deleteRowsAtIndexPaths:@[indexPath] withRowAnimation:UITableViewRowAnimationAutomatic];
}];
return @[action1, action0];
}
四 编辑模式和批量删除
- tableView.editing = YES时,tableView进入编辑模式
- 默认情况下,进入编辑模式时,左边会出现一排红色的“减号”按钮
- (IBAction)remove{
// self.tableView.editing = !self.tableView.isEditing
[self.tableView setEditing:!self.tableView.isEditing animated:YES]
}
self.removeButon.hidden = !self.tableView.isEditing
- (void)viewDidLoad {
[super viewDidLoad];
self.tableView.allowsMultipleSelectionDuringEditing =YES;
self.removeButon.hidden = YES;
}
NSMutableArray *deletedWineArray = [NSMutableArray array];
for (NSIndexPath *indexPath in self.tableView.indexPathsForSelectedRows) {
[deletedWineArray addObject:self.wineArray[indexPath.row]];
}
[self.wineArray removeObjectsInArray:deletedWineArray];
[self.tableView deleteRowsAtIndexPaths:self.tableView.indexPathsForSelectedRows withRowAnimation:UITableViewRowAnimationLeft];
五 自定义批量删除
-(void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{
Wine *wine =self.wineArray[indexPath.row];
wine.check = !wine.isCheck;
[self.tableView reloadData];
}
- 千万不要直接操作cell,一定要通过模型修改(防止cell重用)
/** 是否勾选 */
@property (nonatomic, assign,getter=isCheck) BOOL *check;
@interface XGWineCell()
@property (weak, nonatomic) IBOutlet UIImageView *checkImageView;
@end
- (void)setWine:(XGWine *)wine
{
_wine = wine;
....
self.checkImageView.hidden = !wine.isCheck;
}
- (IBAction)remove
{
NSMutableArray *array =[NSMutableArray array];
for (XMGWine*wine in _wineArray)
{
if (wine.isCheck) {
[array addObject:wine];
}
}
[_wineArray removeObjectsInArray:array];
[self.tableView reloadData];
}