1.1 加载:
UITableViewCell 的加载需要遵守UITableViewDataSource数据源协议中的三个方法:
@protocol UITableViewDataSource<NSObject> @required - (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section; // Row display. Implementers should *always* try to reuse cells by setting each cell‘s reuseIdentifier and querying for available reusable cells with dequeueReusableCellWithIdentifier: // Cell gets various attributes set automatically based on table (separators) and data source (accessory views, editing controls) - (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath; @optional - (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView; // Default is 1 if not implemented
1.2 滑动删除:
只实现系统自带的滑动删除功能 只需要实现数据源下面一个方法:
// After a row has the minus or plus button invoked (based on the UITableViewCellEditingStyle for the cell), the dataSource must commit the change // Not called for edit actions using UITableViewRowAction - the action‘s handler will be invoked instead - (void)tableView:(UITableView *)tableView commitEditingStyle:(UITableViewCellEditingStyle)editingStyle forRowAtIndexPath:(NSIndexPath *)indexPath;
/** * 如果实现了这个方法,就自动实现了滑动删除的功能 * 点击了删除按钮就会调用 * 提交了一个编辑操作就会调用(操作:删除\添加) * @param editingStyle 编辑的行为 * @param indexPath 操作的行号 */ - (void)tableView:(UITableView *)tableView commitEditingStyle:(UITableViewCellEditingStyle)editingStyle forRowAtIndexPath:(NSIndexPath *)indexPath{ if(editingStyle == UITableViewCellEditingStyleDelete){ [self.contactList removeObjectAtIndex:indexPath.row]; [self.tableView deleteRowsAtIndexPaths:@[indexPath] withRowAnimation:UITableViewRowAnimationTop]; // 更新数据至文件 BOOL isSuccess = [NSKeyedArchiver archiveRootObject:self.contactList toFile:self.docPath]; NSLog(@"%@",[email protected]"保存成功":@"保存失败"); }else if (editingStyle == UITableViewCellEditingStyleInsert){ // 添加行 一般很少使用这种方式 HJContact *contact = [[HJContact alloc] init]; contact.name = @"电信"; contact.tel = @"10000"; [self.contactList insertObject:contact atIndex:indexPath.row+1]; // 刷新表格 NSIndexPath *indexPathInsert = [NSIndexPath indexPathForRow:indexPath.row+1 inSection:0]; [self.tableView insertRowsAtIndexPaths:@[indexPathInsert] withRowAnimation:UITableViewRowAnimationTop]; } }
这样就可以实现cell滑动删除
1.3 编辑模式下的删除、添加
如果不滑动,通过点击系统自带的添加和删除按钮进行添加、删除操作 那么得让表格的可编辑属性为YES才行,比如:点击一个按钮后让表格进入编辑模式:
#warning 导航栏删除按钮方法 - (void)cellDelete{ NSLog(@"%s",__func__); // self.tableView.editing = !self.tableView.editing; [self.tableView setEditing:!self.tableView.editing animated:YES]; }
此时cell会进行编辑模式,接着会调用下面方法
#pragma mark tableView代理方法 /** * 当tableView进入编辑状态的时候会调用,询问每一行进行怎样的操作(添加\删除) */ - (UITableViewCellEditingStyle)tableView:(UITableView *)tableView editingStyleForRowAtIndexPath:(NSIndexPath *)indexPath { return indexPath.row %2 ? UITableViewCellEditingStyleDelete : UITableViewCellEditingStyleInsert; }
注意:这个两个方法,一个只是让表格可编辑,接着调用
- (UITableViewCellEditingStyle)tableView:(UITableView *)tableView editingStyleForRowAtIndexPath:(NSIndexPath *)indexPath
方法,告诉tableView那些行是删除或添加,然后再接着调用
- (void)tableView:(UITableView *)tableView commitEditingStyle:(UITableViewCellEditingStyle)editingStyle forRowAtIndexPath:(NSIndexPath *)indexPath
真正的添加、删除操作都在此方法中进行.
时间: 2024-10-24 06:48:08