如果您只返回单元格而不在 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 中设置的内容。运行时的结果将看起来像您发布的包含三个部分的图像。