如何创建像iphone联系地址单元格的UITableViewCell?

时间:2011-10-30 22:11:48

标签: iphone layout uitableview

我需要帮助找出如何在iphone Contacts应用程序中创建一个代表地址的单元格。我不打算创建一个地址。我只需要知道如何在编辑模式下显示以下内容:

  1. 左侧的文字(如UITableViewCellStyleValue2)
  2. 分隔左右的灰线
  3. 以自定义格式右侧的内容 - 我会根据我在这里尝试呈现的内容而有不同的格式,具有不同的高度。
  4. 非常感谢任何示例代码,Apple示例(虽然我找不到),教程或一般指南。我试图避免必须创建一个自定义容器类来处理左侧的所有内容,并根据我想要放在右侧的内容动态调整大小。当然有人已经这样做了,对吧? :)

    编辑模式如下所示:Contacts Address Edit

2 个答案:

答案 0 :(得分:4)

你必须创建自己的UITableVIewCellSubclass,这并不像你想象的那么困难。

基本上你只需要为它们添加2个UITextField和一个UIImageView。

我建议你看一下Apple的TableView编程指南,特别是A Closer Look at Table-View Cells

您的代码示例与您尝试实现的代码示例非常相似。这是一个想法(未经测试的代码):

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

    static NSString *CellIdentifier = @"ImageOnRightCell";

    UITextField*main, *second;
    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
    if (cell == nil) {
        cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier] autorelease];
        cell.accessoryType = UITableViewCellAccessoryDetailDisclosureButton;

        main = [[[UITextField alloc] initWithFrame:CGRectMake(0.0, 0.0, 220.0, 15.0)] autorelease];
        main.autoresizingMask = UIViewAutoresizingFlexibleLeftMargin | UIViewAutoresizingFlexibleHeight;
        [cell.contentView addSubview:main];

        second = [[[UITextField alloc] initWithFrame:CGRectMake(220.0, 0.0, 220.0, 15.0)] autorelease];
        second.autoresizingMask = UIViewAutoresizingFlexibleLeftMargin | UIViewAutoresizingFlexibleHeight;
        [cell.contentView addSubview:second];

    }

    return cell;
}

希望这有帮助, 文森特

答案 1 :(得分:1)

我刚刚做了这样的事情。我的解决方案对我的数据非常具体,但总的来说这就是我的做法:

  1. 左侧文字是垂直居中的UILabel
  2. 右侧是UITableView
  3. “123 Fake Street”将进入UITableViewCell子类,该子类将UITextField抛入内容视图。
  4. “我的城市”和“ST”会进入单个UITableViewCell子类,它必须引入UITextField。我实际上做了一个UITextFieldSubclass,让我可以控制绘制哪些边框(即drawLeftBorder = YES)。
  5. 您必须决定何时调整大小,但您基本上在右侧添加行,然后在父tableview上调用begin / endUpdates块。确保父tableview实现了heightForRowAtIndexPath并根据数据返回正确的值。