我有一个BarButton
项目,当它处于编辑模式时它的名称是Edit
,而当它完成编辑时它是Done
。因此,当用户点击编辑时,editpress
方法会被执行(参见代码)。
使用commitEditingStyle
,单元格和记录(从用于向单元格添加数据的数组)将被删除。
问题:当我点击删除时,单元格会从表格中正确删除。但不是来自用于加载单元格的数组。当我在commitEditingStyle
放置一个调试点时,它只在我第一次点击删除时执行该代码。如果我删除第2个,第3个等的记录,则不执行此代码块。为什么是这样 ?
我尚未在[self.tableView setEditing:YES animated:YES];
中添加commitEditingStyle
条记录。那是缺陷吗?
注意:我不认为我从数组逻辑中删除是不正确的,因为相同的逻辑在其他程序中有效(保护,这就是我没有发布它的原因)
-(void) editpress:(id)sender{
UIBarButtonItem *editButton = (UIBarButtonItem*)self.navigationItem.leftBarButtonItem;
if (!self.tableView.editing) {
[self.tableView setEditing:YES animated:YES];
UIButton *rbut= [UIButton buttonWithType:UIButtonTypeCustom];
[rbut setImage:rightImage forState:UIControlStateNormal];
[rbut addTarget:self action:@selector(editpress:) forControlEvents:UIControlEventTouchUpInside];
UIBarButtonItem *rBarButDone = [[UIBarButtonItem alloc] initWithCustomView:rbut];
self.navigationItem.rightBarButtonItem = rBarButDone;
}
else {
[self.tableView setEditing:NO animated:YES];
UIButton *rbut= [UIButton buttonWithType:UIButtonTypeCustom];
[rbut setImage:rightImage forState:UIControlStateNormal];
[rbut addTarget:self action:@selector(editpress:) forControlEvents:UIControlEventTouchUpInside];
UIBarButtonItem *rBarButEdit = [[UIBarButtonItem alloc] initWithCustomView:rbut];
self.navigationItem.rightBarButtonItem = rBarButEdit;
}
}
- (void)tableView:(UITableView *)tableView commitEditingStyle:(UITableViewCellEditingStyle)editingStyle forRowAtIndexPath:(NSIndexPath *)indexPath
{
if (editingStyle == UITableViewCellEditingStyleDelete) {
[self.tableView beginUpdates];
// I write the logic to delete the record from the array and the table here.
[self.tableView deleteRowsAtIndexPaths:[NSArray arrayWithObjects:indexPath, nil] withRowAnimation:YES];
[self.tableView endUpdates];
}
else if (editingStyle == UITableViewCellEditingStyleInsert) {
// Create a new instance of the appropriate class, insert it into the array, and add a new row to the table view
}
}
答案 0 :(得分:0)
代码显然正在执行commitEditingStyle。但是,删除后,cellForRowAtIndexPath现在是否为已删除的行返回正确的数据?如果您从下载的内部阵列中读取数据,则需要从该内部阵列中删除项目。如果您正在从其他来源读取数据,则需要确保源正在发送正确的数据,或者在删除行后刷新它。在任何一种情况下,无论您的“Web服务”正在做什么来删除数据,都不会使用新数据刷新单元格。此外,您需要在numberOfRowsInSection:method中报告少一个。