删除静态单元格的UITableView部分的最佳方法是什么?

时间:2012-07-07 15:55:46

标签: uitableview ios5

我的部分iPhone应用会以分组格式显示一个UITableView,其中包含三个静态部分。但是,在某些情况下(基于用户输入),最适合在视图控制器显示表时不显示这些部分中的最后一部分。

在控制器的viewDidLoad方法中,我添加了以下有条件执行的代码行:

if ([self.formula containsElementWithoutStableIsotopes]) {
    NSLog(@"Deleting section 2 ...");
    NSUInteger sectionToDelete = 2;
    [self.tableView deleteSections:[NSIndexSet indexSetWithIndex:sectionToDelete] 
                  withRowAnimation:UITableViewRowAnimationAutomatic];
}

“删除第2部分...”会记录到控制台,因此我知道此代码正在执行,但表格似乎不受影响:所有三个部分都照常显示。

在理想的情况下,我更喜欢在表格视图显示之前删除第2部分,但我可以忍受它在出现时被删除。但是,如果我将上面的代码放在viewDidAppear方法中,程序会引发NSInternalInconsistencyException,因为删除前后的部分数量不匹配。

我真的很感谢你对这个话题的帮助。

2 个答案:

答案 0 :(得分:5)

请使用以下代码:

- (void)viewDidAppear:(BOOL)animated {
    [super viewDidAppear:animated];
    sectionToDelete = 1;
    [self.tableView deleteSections:[NSIndexSet indexSetWithIndex:sectionToDelete] withRowAnimation:UITableViewRowAnimationFade];
    [self.tableView reloadData];

}



- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView
{
    // Return the number of sections.
    return 3 - numberOfSectionsToDelete;
}

答案 1 :(得分:0)

最好的方法是 -

[myTableView beginUpdates];
[myArray removeObjectAtIndex:myIndexPath.section];
[myTableView deleteSections:[NSIndexSet indexSetWithIndex:myIndexPath.section] 
           withRowAnimation:UITableViewRowAnimationRight];
[myTableView endUpdates];