0

我有一个包含三个部分的 UITableView,第二部分的表格在编辑模式下显示插入和删除指示器。我正在为 cellForRowAtIndexPath 中的插入行添加一个单元格:当编辑为 YES 时。此外,当表格进入编辑模式时,我会减少部分的数量,因此第三部分不会显示(它有一个按钮,我想在编辑模式下隐藏它)。除非我在 setEditing 中调用 [self.tableView reloadData] 我看不到插入行,但是当我调用它时没有动画。我究竟做错了什么?

- (void)setEditing:(BOOL)flag animated:(BOOL)animated

{
  [super setEditing:flag animated:YES];
  [self.tableView setEditing:flag animated:YES];
  //unless i add [self.tableView reloadData] i don't see the + row, but then there is no animation
  [self.tableView reloadData];

为了确定我正在做的部分的数量

- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView
{
    return self.editing ? 2 : 3;
}

要添加插入行,我在 cellForRowAtIndexPath 中执行此操作

 if (indexPath.row == [[[self recipe] tasks] count])
 {
    cell.textLabel.text = @"Add task...";
    cell.detailTextLabel.text = @"";

非常感谢任何帮助。我很尴尬地说我在这上面浪费了多少时间!

4

2 回答 2

2

您需要使用UITableView' 更新方法。查看 Apple 关于该主题的综合指南以获取更多详细信息,但此代码片段应该会给您一个想法。请注意,当您的表格视图离开编辑模式时,您应该执行相反的操作。

NSIndexPath *pathToAdd = [NSIndexPath indexPathForRow:self.recipe.tasks.count section:SECTION_NEEDING_ONE_MORE_ROW];
NSIndexSet *sectionsToDelete = [NSIndexSet indexSetWithIndex:SECTION_TO_DELETE];
[self.tableView beginUpdates];
[self.tableView insertRowsAtIndexPaths:@[ pathToAdd ] withRowAnimation:UITableViewRowAnimationAutomatic];
[self.tableView deleteSections:sectionsToDelete withRowAnimation:UITableViewRowAnimationAutomatic];
[self.tableView endUpdates];
于 2012-08-31T02:53:07.453 回答
0

非常感谢,卡尔。完美的。我曾多次阅读 Apple 文档,但没有得到它。一个谷歌示例让我走错了路。问题解决了,看起来真的很好。:)

NSIndexPath *pathToAdd = [NSIndexPath indexPathForRow:self.recipe.tasks.count section:1];
NSIndexSet *sectionsToDelete = [NSIndexSet indexSetWithIndex:2];
[self.tableView beginUpdates];
[self.tableView insertRowsAtIndexPaths:@[ pathToAdd ] withRowAnimation:UITableViewRowAnimationAutomatic];
// update the datasource to reflect insertion and number of sections
// I added a 'row' to my datasource for "Add task..."
// which is removed during setEditing:NO
[self.tableView deleteSections:sectionsToDelete withRowAnimation:UITableViewRowAnimationAutomatic];
[self.tableView endUpdates];

托德

于 2012-08-31T20:35:23.277 回答