我有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];
}
}
如果这是一个很好的解决方案,请告诉我,或者,如果我怀疑是正确的话,如果每个展开的部分中有更多行,这将导致将来视图之间的转换速度变慢。任何帮助或建议将不胜感激。感谢。
答案 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];
}
否则您只会删除该部分中除第一个单元格以外的所有单元格。