10

我需要一个UITableView类似于设置应用程序中 Twitter 帐户的分组:

推特账户

也就是说,一种表单或菜单,其中一些部分具有预先已知的一组静态单元格,而其他一些部分必须是动态的,并且允许插入额外的行,就像这里的“添加帐户”一样。我正在管理UITableView一个.xib文件。对于静态单元格,我已经分离了可以在视图控制器.xib的方法中加载的文件。cellForRowAtIndexPath:

我应该如何处理这种桌子?我没有找到任何示例代码。

cellForRowAtIndexPath:方法应该是什么样子?我是否需要保留strong静态单元格的属性?直接在表格视图所在的同一.xib文件中设计每个静态单元格并为它们设置出口会更好吗?(虽然这不允许重用我的自定义单元设计......)

我需要一些指导方针来实现这一目标并正确管理单元和内存。提前致谢

4

2 回答 2

29

如果您只返回单元格而不在 cellForRowAtIndexPath 中添加任何内容,则动态原型单元格的行为类似于静态单元格,因此您可以使用动态原型同时拥有“静态”单元格和动态单元格(其中行数和内容是可变的) .

在下面的示例中,我从 IB 中的表格视图控制器开始(带有分组表格视图),并将动态原型单元格的数量更改为 3。我将第一个单元格的大小调整为 80,并添加了一个 UIImageView 和两个标签。中间的单元格是基本样式的单元格,最后一个是另一个带有单个居中标签的自定义单元格。我给了他们每个人自己的标识符。这是它在 IB 中的样子:

在此处输入图像描述

然后在代码中,我这样做了:

- (void)viewDidLoad {
    [super viewDidLoad];
    self.theData = @[@"One",@"Two",@"Three",@"Four",@"Five"];
    [self.tableView reloadData];
}

-(NSInteger)numberOfSectionsInTableView:(UITableView *)tableView {
    return 3;
}

- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section {
    if (section == 1)
        return self.theData.count;
    return 1;
}

-(CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath {
    if (indexPath.section == 0)
        return 80;
    return 44;
}

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

    if (indexPath.section == 0) {
        cell = [tableView dequeueReusableCellWithIdentifier:@"TitleCell" forIndexPath:indexPath];

    }else if (indexPath.section == 1) {
        cell = [tableView dequeueReusableCellWithIdentifier:@"DataCell" forIndexPath:indexPath];
        cell.textLabel.text = self.theData[indexPath.row];

    }else if (indexPath.section == 2) {
        cell = [tableView dequeueReusableCellWithIdentifier:@"ButtonCell" forIndexPath:indexPath];
    }

    return cell;
}

如您所见,对于“类似静态”的单元格,我只返回具有正确标识符的单元格,我得到的正是我在 IB 中设置的内容。运行时的结果将看起来像您发布的包含三个部分的图像。

于 2013-07-12T05:23:05.797 回答
2

静态只是动态布局之上的一个规定。基本上静态是所见即所得。

如果您不抗拒尝试使用值,我建议您使用动态。有数百个示例可用,例如thisthis

随着您的进一步深入,您会发现自己在自定义动态表视图时会转向两个选项:

  • 子类UITableViewCell(更多的努力,但从长远来看是好的)。再次,遵循这个
  • 使用UITableViewCell内部属性cellForRowAtIndexPath:(更少的努力和快速的结果,但可能会或可能不会因为可能的重绘而对性能友好)

可能性是无穷无尽的,例如在这里自定义单元格背景视图。

于 2013-07-12T05:22:42.727 回答