UITableView中的可编辑tableHeaderView(如Contacts App)

时间:2010-02-12 14:09:31

标签: iphone uitableview editing contacts

我目前正在尝试使用分组的UITableView实现可编辑的详细信息视图。我希望它看起来像Contacts应用程序:

  • 在查看状态下,它应该将标题显示为普通标签(在“联系人”中,它是带有TRANSPARENT背景的名称)。
  • 在编辑状态下,它应该将标题显示为可编辑的UITableViewCell(在Contact的tableHeader中,从仅具有透明背景的纯文本更改为具有白色背景的标准UITableViewCell)。

我不确定实现这一目标的最佳方法是什么。首先,我尝试将标头添加为UILabel tableHeaderView(效果很好),但后来我无法将其切换为UITableViewCell。进入编辑模式时,可能会删除标题并添加新的部分。

目前我正在尝试始终使用UITableViewCell并使其在查看模式下透明,并在编辑模式下将其切换为默认值。但是,我无法使UITabel的UITabel(在UITableViewCellStyleDefault中)透明(虽然我确实设法使UITableViewCell透明,但不是内部的textLabel)。

实现此行为的最佳方法是什么?

2 个答案:

答案 0 :(得分:1)

我也是这样做的(虽然iOS4中的联系人应用程序的更改没有实际意义!)我的解决方案使用两个不同的标题视图,并根据isEditing在它们之间切换:

- (UIView *)infoHeaderAnimated:(BOOL)animated {
    UIView *header = [[[UIView alloc] initWithFrame:CGRectMake(0.0, 0.0, 320.0, 90.0)] autorelease];
    UILabel *label = [[UILabel alloc] initWithFrame:CGRectMake(98.0, 41.0, 221.0, 21.0)];
    label.font = [UIFont boldSystemFontOfSize:17.0];
    label.backgroundColor = [UIColor clearColor];
    label.text = baseEntity.labelText;
    [header addSubview:label];
    [label release];
    return header;
}

- (UIView *)editingHeaderAnimated:(BOOL)animated {
    UIView *header = [[[UIView alloc] initWithFrame:CGRectMake(0.0, 0.0, 320.0, 90.0)] autorelease];
    UITableView *tv = [[UITableView alloc] initWithFrame:CGRectMake(78.0, 10.0, 240.0, 90.0) style:UITableViewStyleGrouped];
    tv.backgroundColor = [UIColor clearColor];
    tv.dataSource = self;
    tv.delegate = self;
    tv.rowHeight = 62.0;    //@@@ height of cell and frame depend on elements
    tv.tag = kEditingHeaderTag;
    editingHeaderTableView = [tv retain];
    [header addSubview:tv];
[tv release];   
    return header;
}

答案 1 :(得分:0)

你要做的是非常标准的,考虑在UITableViewDatasource中实现这些协议,特别是titleForHeaderInSection& commitEditingStyle:

Configuring a Table View
– tableView:cellForRowAtIndexPath:  required method
– numberOfSectionsInTableView:
– tableView:numberOfRowsInSection:  required method
– sectionIndexTitlesForTableView:
– tableView:sectionForSectionIndexTitle:atIndex:
– tableView:titleForHeaderInSection:
– tableView:titleForFooterInSection:

Inserting or Deleting Table Rows
– tableView:commitEditingStyle:forRowAtIndexPath:
– tableView:canEditRowAtIndexPath:

请记住在Interface Builder中选择TableView的类型而不是Plain。