将编辑元素添加到UITableViewCell

时间:2011-04-06 08:17:52

标签: objective-c ios4 iphone-sdk-3.0 uitableview

我在表视图中有几行我想编辑。

我认为 setEditing 方法会给我一个编辑和删除按钮,但它只显示一个删除按钮。因为我没有一个将被推入didSelectRowAtIndexPath的详细视图控制器,我想我可以在所选单元格中显示几个编辑元素。

我需要添加三个按钮来指定分配优先级:低,高和中优先级。这意味着我必须更改所选单元格的高度以便为这些按钮腾出空间,我认为这很容易做到。

我想知道这是否是正确的选择路径?

我今天做了很多研究而没有找到其他人如何在UITableViewCell中解决编辑的例子。如果您在iPhone中的联系人应用程序中编辑联系人,UITableViewCells会更改以便快速轻松地进行编辑,这就是我正在寻找的内容。

那么对于这个问题我有什么建议?

编辑#1

我在didSelectRowAtIndexPath中的代码是:

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath 
{
    Cell *selectedCell = (Cell *)[tableView cellForRowAtIndexPath: indexPath];

    UIButton *btn = [UIButton buttonWithType: UIButtonTypeRoundedRect];
    btn.frame = CGRectMake(0, 0, 50, 100);
    btn.titleLabel.text = @"Set this item to High Priority";
    btn.backgroundColor = [UIColor greenColor];
    [selectedCell.contentView addSubview: btn];

    self.editing = YES;

    [tableView reloadRowsAtIndexPaths:[NSArray arrayWithObject: indexPath] withRowAnimation:UITableViewRowAnimationFade];
}

heightForRowAtIndexPath的代码:

- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath
{

    Cell *cell = nil;
    if (self.editing)
        cell = (Cell *)[tableView cellForRowAtIndexPath: indexPath];
    else
        cell = nil;

    BOOL expandCell = NO;
    NSInteger expandationHeight = 0;

    if (cell != nil)
    {
        for (UIButton *btn in cell.contentView.subviews)
        {
            NSLog(@"A button was found.");
            expandationHeight = 70;
            expandCell = YES;
        }       
    }

    return expandationHeight + heightOfOtherElements;
}

当我点击一个单元格时没有任何事情发生但一切都被禁用,我无法点击孔视图上的任何元素。这与[tableView cellForRowAtIndexPath:indexPath]有关,因为如果我取消注释该行,则UI不会被禁用。

我做错了什么?

1 个答案:

答案 0 :(得分:1)

虽然需要一些东西,但这并不复杂。

您想要更改一个单元格或所有单元格的内容吗?

要为一个单元格指定特定高度,请使用- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath委托方法。

每次显示表格视图时都会为每个单元格调用它。如果要更改单行,请从UITableView调用reloadRowsAtIndexPaths:withRowAnimation:方法。如果要更新所有单元格,只需使用- (void)reloadData方法。

您还可以使用UITableView中的- (UITableViewCell *)cellForRowAtIndexPath:(NSIndexPath *)indexPath方法访问特定单元格。然后你可以根据需要重新配置它以在其上添加各种元素。

因此,当选择一个单元格时,检查是否必须编辑它,然后:

  • 从cellForRowAtIndexPath
  • 更新您的单元格
  • 确保你的方法tableView:heightForRowAtIndexPath:将返回好的高度
  • 告诉表视图使用reloadRowsAtIndexPaths更新视图:withRowAnimation: