在tableView中進行數據的添加刪除更新操做,其實就是對模型數據就行修改,而後再讓tableView從新load一遍數據的過程,主要是一些api的認識。
api
一、添加行:數組
- (IBAction)add { XXModel *model = [[XXModel alloc]init]; //設置model的屬性數據 //... //添加在最前面的一行 [self.models insertObject:model atIndex:0]; //通知tableView數據源發生了改變,須要從新加載數據 //[self.tableView reloadData]; //少行操做時,insertRowsAtIndexPaths效率更高 [self.tableView insertRowsAtIndexPaths:@[[NSIndexPath indexPathForRow:0 inSection:0]] withRowAnimation:UITableViewRowAnimationTop]; //也能夠一次添加多行,可是添加的對象個數必定要和NSIndexPath數組對應 [self.tableView insertRowsAtIndexPaths:@[ [NSIndexPath indexPathForRow:0 inSection:0] [NSIndexPath indexPathForRow:1 inSection:0] ] withRowAnimation:UITableViewRowAnimationTop]; }
二、刪除行:微信
- (IBAction)romove { [self.deals removeObjectAtIndex:0]; // [self.tableView reloadData]; [self.tableView deleteRowsAtIndexPaths:@[[NSIndexPath indexPathForRow:0 inSection:0]] withRowAnimation:UITableViewRowAnimationTop]; }
三、更新某行數據:spa
- (IBAction)update { XXModel *model = self.models[3]; //修改model數據 [self.tableView reloadRowsAtIndexPaths:@[[NSIndexPath indexPathForRow:3 inSection:0]] withRowAnimation:UITableViewRowAnimationNone]; }
相似微信那種在tableView中某行左滑顯示刪除按鈕的功能api:
代理
#pragma mark -tableView代理方法 /** * 只要實現這個方法,左劃cell出現刪除按鈕的功能就有了 * 用戶提交了添加(點擊了添加按鈕)\刪除(點擊了刪除按鈕)操做時會調用 */ - (void)tableView:(UITableView *)tableView commitEditingStyle:(UITableViewCellEditingStyle)editingStyle forRowAtIndexPath:(NSIndexPath *)indexPath { //editingStyle的值默認是UITableViewCellEditingStyleDelete if (editingStyle == UITableViewCellEditingStyleInsert) { //添加操做 }else if (editingStyle == UITableViewCellEditingStyleDelete) { //刪除操做 } }
另外還有tableView的編輯模式,設置編輯模式:code
// 進入編輯模式 [self.tableView setEditing:!self.tableView.isEditing animated:YES]; // 容許在編輯模式進行多選操做,用做批量操做 self.tableView.allowsMultipleSelectionDuringEditing = YES;
/** * 這個方法決定了編輯模式時,每一行的編輯類型:insert(+按鈕)、delete(-按鈕) */ - (UITableViewCellEditingStyle)tableView:(UITableView *)tableView editingStyleForRowAtIndexPath:(NSIndexPath *)indexPath { return indexPath.row % 2 == 0 ? UITableViewCellEditingStyleInsert : UITableViewCellEditingStyleDelete; }
若是要想左滑彈出多個按鈕,在iOS8.0以後能夠經過這個方法實現:對象
- (NSArray<UITableViewRowAction *> *)tableView:(UITableView *)tableView editActionsForRowAtIndexPath:(NSIndexPath *)indexPath { UITableViewRowAction *action = [UITableViewRowAction rowActionWithStyle:UITableViewRowActionStyleDefault title:@"置頂" handler:^(UITableViewRowAction * _Nonnull action, NSIndexPath * _Nonnull indexPath) { NSLog(@"置頂"); }]; action.backgroundColor = [UIColor orangeColor]; UITableViewRowAction *action1 = [UITableViewRowAction rowActionWithStyle:UITableViewRowActionStyleDefault title:@"訂閱" handler:^(UITableViewRowAction * _Nonnull action, NSIndexPath * _Nonnull indexPath) { NSLog(@"訂閱"); }]; action1.backgroundColor = [UIColor grayColor]; UITableViewRowAction *action2 = [UITableViewRowAction rowActionWithStyle:UITableViewRowActionStyleDefault title:@"刪除" handler:^(UITableViewRowAction * _Nonnull action, NSIndexPath * _Nonnull indexPath) { NSLog(@"刪除"); }]; return @[action,action1,action2]; }
效果圖:ip