ios - 编辑模式下的 UITableView 不显示插入,除非调用 reloadData,这会终止动画

标签 ios uitableview setediting

我有一个包含三个部分的 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 = @"";

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

最佳答案

您需要使用UITableView 的更新方法。查看 Apple 的 comprehensive guide有关更多详细信息的主题,但此代码片段应该会给您一个想法。请注意,当您的 TableView 离开编辑模式时,您应该执行相反的操作。

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];

关于ios - 编辑模式下的 UITableView 不显示插入,除非调用 reloadData,这会终止动画,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12208228/

相关文章:

ios - 限制 UIActivityViewController 共享扩展事件

ios - swift /XCode 6.4 : add back button to navigation controller in navigation bar

ios - TableView : cellForRowAtIndexPath: get called not only for visible cells?

ios - 如何在 swift 4 的 uitableView 中添加多个部分

ios - 如何将 setEditing 状态转换为编辑/完成按钮的切换模式

ios - 如何从子类委托(delegate)方法调用父类(super class)委托(delegate)方法

动态内容的 iOS 最佳实践

iphone - 仪器,目标运行失败 : Remote exception encountered : 'Failed to get task for pid'