我正在尝试使用以下代码删除单元格并从UITableView中删除一个部分:
[self.tableView beginUpdates];
[arraymasterFeedFullDetails removeObjectAtIndex:cellSelectedIndexPath.section];
[self.tableView deleteSections:[NSIndexSet indexSetWithIndex:cellSelectedIndexPath.section]withRowAnimation:UITableViewRowAnimationFade];
[self.tableView endUpdates];
这里,cellSelectedIndexPath是NSIndexPath变量,它指向当前选择的部分。 arraymasterFeedFullDetails是我的数据源,每个部分只有一行。
- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView
{
// Return the number of sections.
return [arraymasterFeedFullDetails count];
}
- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
{
return 1;
}
答案 0 :(得分:0)
当您拥有数据源(在您的情况下为arraymasterFeedFullDetails
)时,删除项目需要做的是从数据源中删除对象,然后重新加载表。
您可以使用[self.tableView reloadData];
所以你的代码就像这样:
[arraymasterFeedFullDetails removeObjectAtIndex:cellSelectedIndexPath.section];
[self.tableView reloadData];
答案 1 :(得分:0)
当你有一个数据源(在你的情况下是arraymasterFeedFullDetails)时,删除项目需要做的就是从数据源中删除对象,然后重新加载整个表,或者从数据源中删除单元格用动画。 这通常会产生视觉上更好的结果。
reloadData方法将重新加载整个表,没有动画。 当前显示的单元格将被简单地重绘。 E.g:
[self.tableView reloadData];
您不需要更新tableview本身,因为这将简单地重新绘制。
为了仅删除带有动画效果的“已编辑的单元格”,您可以使用方法 deleteRowsAtIndexPaths:withRowAnimation:
E.g:
// Overridden to support editing the table view.
- (void)tableView:(UITableView *)tableView commitEditingStyle:(UITableViewCellEditingStyle)editingStyle forRowAtIndexPath:(NSIndexPath *)indexPath {
if (editingStyle == UITableViewCellEditingStyleDelete) {
[_list2 removeObjectAtIndex:indexPath.row]; // remove row from array
[tableView deleteRowsAtIndexPaths:@[indexPath] withRowAnimation:UITableViewRowAnimationFade]; // remove cell from UITableView
} 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
}
}
您还可以从 mutable 数组中删除行,然后调用 的 deleteSections:withRowAnimation:强> 在 beginUpdates 和 endUpdates 之间,以便从您的tableview中删除整个部分;
在两种动画删除方法中,在执行任何将更新tableview的动画之前,您需要确保数据源具有相同的tableview单元格数(删除后)。