删除tableview中的部分时应用程序崩溃

时间:2015-12-02 09:40:14

标签: ios objective-c uitableview

我正在尝试使用以下代码删除单元格并从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;
}

2 个答案:

答案 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单元格数(删除后)