iOS:添加新单元格时的editingStyleForRowAtIndexPath

时间:2011-02-23 13:47:13

标签: ios uitableview

当用户使用以下代码将表格切换到编辑模式时,我正在向UITableView部分添加一行:

- (void) setEditing:(BOOL) editing animated:(BOOL) animated {
    [super setEditing:editing animated:animated];
    if (editing) {
        [self.tableView insertRowsAtIndexPaths:[NSArray arrayWithObject: [NSIndexPath indexPathForRow:0 inSection:SECTION_SUPPLIERS]]   withRowAnimation:UITableViewRowAnimationFade];
    } 
}

要创建“添加新供应商...”行的对象。这是有效的,但是当表想要获得编辑样式以便它可以添加加号或减号图标时,我遇到了问题。

- (UITableViewCellEditingStyle) tableView:(UITableView *) tableView editingStyleForRowAtIndexPath:(NSIndexPath *) indexPath {
    return ([self.tableView isEditing] && indexPath.row == 0) ? UITableViewCellEditingStyleInsert : UITableViewCellEditingStyleDelete;
}

序列似乎是这样的:

  1. 表格切换为编辑。目前只有一个供应商行,因此它会查询行== 0的编辑样式。
  2. 完成新行的插入,然后再次使用行== 0触发另一个编辑样式查询。
  3. 因此,如果我使用此序列并使用行号和tableView isEditing来决定编辑样式图标,我最终会添加添加新图标和当前供应商行以及加号图标。

    插入行并指定适当的编辑样式的最佳方法是什么 - 加上新行,减去任何其他行?

1 个答案:

答案 0 :(得分:3)

您是否尝试将“添加新...”行放在底部而不是顶部?不是检查[indexPath row] == 0而是检查[indexPath row] == [items count],而您的tableView:numberOfRowsInSection:实现如下:

- (NSInteger)tableView:(UITableView *)tableView
 numberOfRowsInSection:(NSInteger)section {
    int numberOfRows = [items count];

    if ([self isEditing]) {
        numberOfRows++;
    }

    return numberOfRows;
}

这就是iPhone编程中的例子:The Big Nerd Ranch Guide的工作原理。