Nic*_*ill 5 cocoa-touch ios ios7
我不太确定这里发生了什么,但我遇到了一个我正在处理的联系表格.在我的表单中,我添加了向联系人添加电子邮件地址的功能.如下图所示,一旦用户点击"添加电子邮件",就会在"电子邮件"部分添加一行.

但是,在我单击删除电子邮件后,添加电子邮件按钮下方会出现一个额外的单元格(如下图所示).

看似先前的删除单元格中有一个小红框,好像表格没有重新加载一样.这是我的删除代码:
- (void)tableView:(UITableView *)tableView commitEditingStyle:(UITableViewCellEditingStyle)editingStyle forRowAtIndexPath:(NSIndexPath *)indexPath
{
if( editingStyle == UITableViewCellEditingStyleDelete )
{
// Update the data source
NSMutableArray *fields = (NSMutableArray *)self.fields[@(indexPath.section)];
[fields removeObjectAtIndex:indexPath.row];
NSMutableArray *values = (NSMutableArray *)self.values[@([self fieldTypeAtIndexPath:indexPath])];
[values removeObjectAtIndex:indexPath.row];
[tableView deleteRowsAtIndexPaths:[NSArray arrayWithObject:indexPath] withRowAnimation:UITableViewRowAnimationMiddle];
}
}
Run Code Online (Sandbox Code Playgroud)
那么为什么那个细胞会继续存在呢?我可以[tableView reloadData]在上面的方法中调用并删除多余的单元格然后它会混淆动画.你能否清楚我在这里做错了什么?
选项 1:在调用 deleteRowsAtIndexPaths 之前,必须确保 numberOfRowsInSection 将返回正确的值(例如,如果该部分中最初有 2 行,那么现在应该返回 1 行)。
选项2:如果这不是问题,我会尝试不同的动画类型(例如UITableViewRowAnimationAutomatic),只是为了看看是否有任何效果。
选项 3:确保 cellForRowAtIndexPath 返回一个有效的单元格,其内容被重置。否则,它可能会重复使用无效的单元格或显示以前存在的内容。
选项 4:由于高度不同,请确保 heightForRowAtIndexPath 返回正确的值。您可能需要调用 reloadRowsAtIndexPaths以便表视图了解高度差。
| 归档时间: |
|
| 查看次数: |
2452 次 |
| 最近记录: |