如果要允许用户删除表格内的对象,需要打开表格的编辑功能。这样表中的每个单元格就都会在左侧显示一个红色的删除图标。每个单元格在编辑过程中都会自动缩进:
- [ self.tableView setEditing:YES animated:YES ];
这个操作应当由导航栏按钮来触发,比如一个标有Edit的按钮,或者是某些类似操作。编辑结束时,使用同一个方法来退出编辑模式:
- [ self.tableView setEditing: NO animated: YES ];
[self.thetableview setEditing:!self.thetableview.editing animated:YES];
标识符号的确定
- (UITableViewCellEditingStyle)tableView:(UITableView*)tableView editingStyleForRowAtIndexPath:(NSIndexPath*)indexPath { if(indexPath.row == cellnum-1){ return UITableViewCellEditingStyleNone; } return UITableViewCellEditingStyleDelete; }
在 编辑过程中,用户可以从表格中删除记录。用户会看到一个删除确认信息。确认之后,数据源的commitEditingStyle方法就会得到通知,从而令 应用程序得知有一个删除请求。这个方法也属于UITableViewDataSource协议。你需要从数据源中删除对应的数据,来满足这个请求。你还要 指示表格视图删除该行:
- - (void)tableView:(UITableView *)tableView
- commitEditingStyle:(UITableViewCellEditingStyle) editingStyle
- forRowAtIndexPath:(NSIndexPath *) indexPath
- {
- if (editingStyle == UITableViewCellEditingStyleDelete) {
- NSLog(@'Deleted section %d, cell %d',
- [ indexPath indexAtPosition: 0 ],
[ indexPath indexAtPosition: 1 ]);- /* 添上代码,将单元格从你的数据中删除 */
- /* 从表格中删除单元格 */
- NSMutableArray *array = [ [ NSMutableArray alloc ] init ];
- [ array addObject: indexPath ];
- [ self.tableView deleteRowsAtIndexPaths: array
- withRowAnimation: UITableViewRowAnimationFade
- ];
- }
- }
提示
如果你的代理类中有这个方法,那么扫动删除功能会自动生效。
你可以向deleteRowsAtIndexPaths方法传递一个索引路径的数组,从而在表格中删除一到多行。你还可以在几个预定义的动画效果中指定一个,在删除单元格时显示。支持表3-9所示的动画效果。
表3-9
动 画 效 果 | 描 述 |
UITableViewRowAnimationFade | 单元格淡出 |
UITableViewRowAnimationRight | 单元格从右侧滑出 |
UITableViewRowAnimationLeft | 单元格从左侧滑出 |
UITableViewRowAnimationTop | 单元格滑动到相邻单元格之上 |
UITableViewRowAnimationBottom | 单元格滑动到相邻单元格之下 |