我一直在做很多研究,但找不到答案或帮助指南。 我想在表格视图中有多个自定义单元格。例如,第一个单元格可以显示图像,而第二个单元格显示一些信息,然后第三个单元格显示其他内容(所有单元格大小不同)。我已经尝试了很多代码,但无法正确使用,我也一直在观看教程,但仍然无法做到这一点。在没有单元格的空白UIView中执行此操作会更容易吗? 非常感谢谢谢,帮助和建议。
答案 0 :(得分:1)
我们假设您有一个包含一个部分的表视图。以下是我通常如何做到这一点:
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
id cell = nil;
switch (indexPath.row) {
case 0:
cell = [self dequeCellIdentifier:@"FirstTypeOfCell"];
break;
case 1:
cell = [self dequeCellIdentifier:@"SecondTypeOfCell"];
break;
case 2:
cell = [self dequeCellIdentifier:@"ThirdTypeOfCell"];
break;
default:
cell = [self dequeCellIdentifier:@"JustThrowThisInThere"];
break;
}
return cell;
}
要使单元格出列,请确保在XIB界面中指定其标识符并将此方法添加到出列:
- (id)dequeCellIdentifier:(NSString *)cellIdentifier {
id cell = [self.tableView dequeueReusableCellWithIdentifier:cellIdentifier];
if (!cell) {
cell = [[NSBundle mainBundle] loadNibNamed:cellIdentifier owner:self options:nil][0];
}
return cell;
}
要获得不同的单元格高度,请使用- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath
方法:
- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath {
switch (indexPath.row) {
case 0:
return 40.0;
case 1:
return 100.0;
default:
return 50.0;
}
}
答案 1 :(得分:0)
为从UITableViewCell继承的每个单元格创建自定义类。确保在创建类时也创建了一个XIB。这使您可以灵活地在界面构建器中设计单元格。
查看此答案:How do you load custom UITableViewCells from Xib files?
PS。别忘了改变
中细胞的高度- (CGFloat)tableView:(UITableView *)tableView
heightForRowAtIndexPath:(NSIndexPath *)indexPath
答案 2 :(得分:0)
您可以在故事板中使用原型单元格。基本上你要做的是为每种类型创建一个原型单元格,并为每个类型创建一个UITableViewCell
子类。还给每个人一个唯一的ID。所有这些步骤都会详细解释here(跟随Modifying the CarTableViewCell Class
部分)。
现在是棘手的部分。上面的教程仅介绍了如何创建一个自定义单元格。如果您需要多种类型的自定义单元格,请创建具有唯一reuse identifier
和subclasses
的所有单元格。现在我不确定这是否是正确的方法,但这是我通常做的事情:
CellForRowAtIndexPath
中的:
if([cellType isEqualToString:@"DefaultCell"])
{
MyTableDefaultCell *cell = [self.tableViewOutlet dequeueReusableCellWithIdentifier:@"DefaultCell" forIndexPath:indexPath];
if(cell == nil)
{
cell = [[MyTableDefaultCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:@"DefaultCell"];
}
//Do your thing here.
return cell;
}
else if([cellType isEqualToString:@"SegmentedControlCell"])
{
MyTableSegmentControlCell *cell = [self.tableViewOutlet dequeueReusableCellWithIdentifier:@"SegmentedControlCell" forIndexPath:indexPath];
if(cell == nil)
{
cell = [[MyTableSegmentControlCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:@"SegmentedControlCell"];
}
// Setup cell here.
return cell;
}
并且不要忘记在heightForRowAtIndexPath:
中为每个单元格返回适当的高度。欢呼声。