我的部分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
,因为删除前后的部分数量不匹配。
我真的很感谢你对这个话题的帮助。
答案 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];