Categories

Posts Tagged ‘划动删除’

iPhone表格中划动删除单元格

iPhone上的程序很多用表格UITableView来显示数据、做布局等。 当用UITableView显示数据是经常会需要删除、插入数据条目。 SDK提供两种删除UITableViewCell的方法

  • 设置整个表格为编辑模式,如果没有做其他编辑风格(editing style),就会在每个单元格左面有一个圆形红色删除按钮,点击该按钮会在右边显示“Delete”按钮 deletion_control
  • 在单元格上划动,会在划动的单元格右边显示“Delete”按钮, 这是SDK提供的快捷删除单元格的方法, 官方说法是 swipe to delete

要完成删除的动作必须在delegate中实现这个方法

1
2
3
- (void)tableView:(UITableView *)tableView commitEditingStyle:(UITableViewCellEditingStyle)editingStyle forRowAtIndexPath:(NSIndexPath *)indexPath
{
}

当点击“Delete” 删除按钮是会发送该消息, 在此可以处理删除。 此外如果想在删除按钮显示前以及删除动作完成后调整布局, 可以在delegate中实现下面两个方法

1
2
3
4
5
6
7
8
//
- (void)tableView:(UITableView *)tableView willBeginEditingRowAtIndexPath:(NSIndexPath *)indexPath
{
}
//
- (void)tableView:(UITableView *)tableView didEndEditingRowAtIndexPath:(NSIndexPath *)indexPath
{
}

需要注意的是,如果表格是在UIViewController里并且table的delegate是ViewController, 那么table必须是viewcontroller的view,而不是能是viewController 的view的一个子视图,比如在UIViewController的loadView实现中,以往会这么写

1
2
3
4
5
6
7
8
9
10
-(void) loadView
{
	UIView* contentView = [[UIView alloc] initWithFrame:...];
	self.view  = contentView;
	[contentView release];
 
	tableView = [[UITableView alloc] initWithFrame:...];
	// 初始化表格
	[self.view addSubView: tableView];
}

如果这样写,划动的时候就不会触发willBeginEditingRowAtIndexPath,必须这样写: self.view = tableView 才能触发willBeginEditingRowAtIndexPath。