如何拥有具有两种不同单元格类型的 UITableView 并以编程方式设置每个单元格布局,而不是通过情节提要?
Posted
技术标签:
【中文标题】如何拥有具有两种不同单元格类型的 UITableView 并以编程方式设置每个单元格布局,而不是通过情节提要?【英文标题】:How do I have a UITableView with two different cell types and set each of the`cell layouts up programmatically, instead of via a Storyboard? 【发布时间】:2013-04-14 03:17:43 【问题描述】:之前我使用故事板进行了此设置,已拖动 UILabel,将它们定位并调整它们的大小,而不是在我将它们拖动到的 UITableViewCell 上,然后为另一个 UITableViewCell 执行不同的版本。
例如,如下所示(但在图片中它们尚未使用标签进行自定义):
然后在数据源中,我只需检查标识符,并根据标识符是什么,相应地自定义单元格。
但是,我需要比从情节提要中获得更多的定制,因为每个单元格将有两个 UIView(一个顶部和一个底部以允许滑动顶部)所以我真的不能使用情节提要执行此操作,因为我以编程方式将标签和所有内容添加到 UIView。
但我的问题是:当我以编程方式执行此操作时,如何判断哪个单元格是哪个单元格,以便我可以相应地自定义 UILabel 的布局?使用情节提要,我显然可以将 UILabel 拖到每个上,但是当以编程方式执行此操作并设置 UIView 时,我不知道怎么说,“嘿,如果标识符是这个,请像这样添加 UILabel”,因为UIViews 不知道任何标识符。
基本上结构是这样的:
UITableView -> UITableViewCell -> CellFront(UIView) & CellBack(UIView)
单元格的外观来自于添加到 CellFront UIView 的标签。但是单元格有两种外观,如果没有故事板,我不知道该怎么做。
【问题讨论】:
【参考方案1】:虽然UIView
s 不知道标识符,但它们有一个名为tag
的属性,可用于您想要的任何目的。您可以将标记设置为,例如,在一种单元格上设置为1
,在另一种单元格上设置为2
,然后使用标记来区分代码中的单元格。此外,一旦您的视图被标记,您可以在包含视图上调用viewWithTag:
,并使用您想要的tag
取回视图。
【讨论】:
【参考方案2】:如果您仅在代码中创建单元格,那么您在表格视图控制器的 viewDidLoad 方法中注册您的 UITableViewCell 子类。该方法设置标识符。然后,您在 cellForRowAtIndexPath: 中使用该标识符:就像您为 xib 或情节提要创建的单元格一样。
[self.tableView registerClass:[MyCellSubclass class] forCellReuseIdentifier:@"MyIdentifier"];
【讨论】:
【参考方案3】:这是一种方法:
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
// Adjust the condition to match your needs
if (indexPath.row == 0)
static NSString *Identifier1 = @"CellType1";
// cell type 1
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:Identifier1];
if (cell == nil)
cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:Identifier1];
// add subviews here
// set cell properties
return cell;
else
static NSString *Identifier1 = @"CellType2";
// cell type 2
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:Identifier2];
if (cell == nil)
cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:Identifier2];
// add subviews here
// set cell properties
return cell;
【讨论】:
以上是关于如何拥有具有两种不同单元格类型的 UITableView 并以编程方式设置每个单元格布局,而不是通过情节提要?的主要内容,如果未能解决你的问题,请参考以下文章
如果我有两种不同类型的单元格,如何使用 FetchedResultsController?