将单元格添加到iOS中UITableView的底部

时间:2012-03-26 15:23:06

标签: iphone ios uitableview storyboard

我正在使用带有故事板的xcode 4.2创建一个iphone应用程序。

当我按下右上角的编辑按钮时,我想有删除现有行的选项,并在顶部看到额外的单元格(带有绿色的“+”图标),这样我就可以添加一个新细胞。

我有一个使用CoreData

viewDidLoad方法中填充的数组

我已启用设置按钮

self.navigationItem.rightBarButtonItem = self.editButtonItem;

并实施了方法

- (void)tableView:(UITableView *)tableView commitEditingStyle:   
          (UITableViewCellEditingStyle)editingStyle forRowAtIndexPath:
                   (NSIndexPath *)indexPath
{
    if (editingStyle == UITableViewCellEditingStyleDelete) {
        // removing a cell from my array and db here... 
    }   
    else if (editingStyle == UITableViewCellEditingStyleInsert) {
        // adding a cell to my array and db here...
    }   
}

我意识到我需要在某个时刻添加单元格然后我可以编辑但是我不清楚在哪里,我无法在互联网上找到解释。

2 个答案:

答案 0 :(得分:20)

好的,基本的想法是,当点击编辑按钮时,我们将显示每行旁边的删除控件,并添加一个带有添加控件的新行,以便用户可以单击它以便添加一个条目吗?首先,因为您已经设置了编辑按钮,所以让我们指示我们的表格在编辑模式下我们应该显示一个额外的行。我们在tableView:numberOfRowsInSection

中执行此操作
-(NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
{
    return self.editing ? a_recs.count + 1 : a_recs.count;
}

a_recs这里是我设置的数组,用于存储我们的记录,因此您必须使用自己的数组将其切换出来。接下来我们告诉我们tableView:cellForRowAtIndexPath:如何处理额外的行:

-(UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
    NSString *CellIdentifier = @"Cell";
    BOOL b_addCell = (indexPath.row == a_recs.count);
    if (b_addCell) // set identifier for add row
        CellIdentifier = @"AddCell";

    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
    if (cell == nil) {
        cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier] autorelease];
        if (!b_addCell) {
            cell.accessoryType = UITableViewCellAccessoryDisclosureIndicator;
        }
    }

    if (b_addCell)
        cell.textLabel.text = @"Add ...";
    else
        cell.textLabel.text = [a_recs objectAtIndex:indexPath.row];

    return cell;
}

我们还希望指示我们的表格,对于该添加行,我们需要添加图标:

-(UITableViewCellEditingStyle)tableView:(UITableView *)tableView editingStyleForRowAtIndexPath:(NSIndexPath *)indexPath {
    if (indexPath.row == a_recs.count) 
        return UITableViewCellEditingStyleInsert;
    else
        return UITableViewCellEditingStyleDelete;
}

黄油。现在是超级秘密的功夫酱,用筷子把它全部拿来:

-(void)setEditing:(BOOL)editing animated:(BOOL)animated {
    [super setEditing:editing animated:animated];
    [self.tableView setEditing:editing animated:animated];
    if(editing) {
        [self.tableView beginUpdates];
        [self.tableView insertRowsAtIndexPaths:[NSArray arrayWithObject:[NSIndexPath indexPathForRow:a_recs.count inSection:0]] withRowAnimation:UITableViewRowAnimationLeft];
        [self.tableView endUpdates];        
    } else {
        [self.tableView beginUpdates];
        [self.tableView deleteRowsAtIndexPaths:[NSArray arrayWithObject:[NSIndexPath indexPathForRow:a_recs.count inSection:0]] withRowAnimation:UITableViewRowAnimationLeft];
        [self.tableView endUpdates];
        // place here anything else to do when the done button is clicked

    }
}

祝你好运和好胃口!

答案 1 :(得分:4)

This tutorial值得一读,应该可以帮到你。它展示了如何在UITableView的底部设置“添加新行”UITableView行,但是你应该能够在你的实现中将它显示在UITableView的顶部:

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath

e.g。

if(self.editing && indexPath.row == 1)
{
    cell.text = @"Insert new row";
    ...

希望这有帮助!