iOS - UITableView删除部分中的所有行

时间:2015-08-03 21:25:05

标签: ios objective-c uitableview

我有UITableView可扩展部分。当用户转到另一个视图时,我需要折叠所有展开的部分,我需要将其放入viewWillDisappear方法中。

我只找到了一次如何从表视图中删除所有行的解决方案,但有没有办法删除特定部分的所有行?

编辑:

我已经找到了解决方案,但我不确定它是否是最佳的,或者可能导致未来效率低下。无论何时扩展单元格,它都会被添加到NSMutableIndexSet。所以在我的viewWillDisappear方法中,我迭代扩展的部分,如下所示:

-(void)viewWillDisappear:(BOOL)animated
{
    if (expandedSections.count != 0) {
        NSLog(@"COLLAPSING CALLED");
        [self.tableView beginUpdates];

        NSUInteger section = [expandedSections firstIndex];

        do
        {
            NSInteger rows;
            NSMutableArray *tmpArray = [NSMutableArray array];
            rows = [self tableView:self.tableView numberOfRowsInSection:section];
            [expandedSections removeIndex:section];
            for (int i=1; i<rows; i++) {
                NSIndexPath *tmpIndexPath = [NSIndexPath indexPathForRow:i inSection:section];
                [tmpArray addObject:tmpIndexPath];
            }
            [self.tableView deleteRowsAtIndexPaths:tmpArray withRowAnimation:UITableViewRowAnimationTop];
            NSIndexPath *expandableCellIndexPath = [NSIndexPath indexPathForRow:0 inSection:section];
            UITableViewCell *cell = [self.tableView cellForRowAtIndexPath:expandableCellIndexPath];
            cell.accessoryView = [DTCustomColoredAccessory accessoryWithColor:[self.colorHolder objectAtIndex:section] type:DTCustomColoredAccessoryTypeRight];


            section = [expandedSections indexGreaterThanIndex:section];
        } while (section != NSNotFound);

        [self.tableView endUpdates];
    }
}

如果这是一个很好的解决方案,请告诉我,或者,如果我怀疑是正确的话,如果每个展开的部分中有更多行,这将导致将来视图之间的转换速度变慢。任何帮助或建议将不胜感激。感谢。

2 个答案:

答案 0 :(得分:1)

如果要为更改设置动画,则需要先更新数据源(对于该部分中的行数返回0),然后删除部分并在one transaction between [tv beginUpdates] [tv endUpdates]中的相同索引路径处添加部分

否则只需更新数据源并在返回VC的路上重新加载表(如果您不想要任何动画)

答案 1 :(得分:0)

我没有详细阅读,但肯定for循环应该从零开始。

    for (int i=0; i<rows; i++) {
        NSIndexPath *tmpIndexPath = [NSIndexPath indexPathForRow:i inSection:section];
        [tmpArray addObject:tmpIndexPath];
    }

否则您只会删除该部分中除第一个单元格以外的所有单元格。