iPhone-如何将情节提要与自定义UITableView单元格和CellWithIdentifier一起使用

iPhone-如何将情节提要与自定义UITableView单元格和CellWithIdentifier一起使用,iphone,uitableview,Iphone,Uitableview,我正试图利用新的情节提要设计器和绘制UITableView单元格的方便性,而不是以编程方式“设计”每一行 标准单元格的一个很好的示例链接在堆栈溢出处: 与使用“[cell textLabel]”的链接方法不同,我希望在每行顶部使用自己的标签、按钮和图像。 因此,我创建了几个原型单元/行,并为它们分配了标识符(使用故事板) 现在:访问每行的“自定义”控件/标签的最聪明的方法是什么?我试图通过ID搜索它们,但没有找到任何东西。 我的想法是,它应该按照以下思路运作: [[[cell subviews

我正试图利用新的情节提要设计器和绘制UITableView单元格的方便性,而不是以编程方式“设计”每一行

标准单元格的一个很好的示例链接在堆栈溢出处:

与使用“[cell textLabel]”的链接方法不同,我希望在每行顶部使用自己的标签、按钮和图像。 因此,我创建了几个原型单元/行,并为它们分配了标识符(使用故事板)

现在:访问每行的“自定义”控件/标签的最聪明的方法是什么?我试图通过ID搜索它们,但没有找到任何东西。 我的想法是,它应该按照以下思路运作:

[[[cell subviews] getObjectByID:@"labelTime"] setText:@"Whatever"];
我对API的期望是完全错误的还是我没有找到正确的API


有什么想法或建议吗?

对于在序列图像板中创建的每个新自定义UITableViewCell,您需要创建一个新的类文件,该类文件实现UITableViewCell以将其链接到。确保将在情节提要中布置的新单元中的所有控件映射到实例属性。然后,您只需像正常情况一样将其用于排队:

YourTableViewCellClass *cell = (YourTableViewCellClass*)[tableView dequeueReusableCellWithIdentifier:@"YourCellIdentifierStringDefinedInStoryBoard"];
// then set the properties for the class.
cell.labelTime = @"whatever";

有两种方法可以访问自定义子视图。更简单的方法是使用标记。每个视图都有一个
标记
属性,它是一个整数。您可以在nib中设置标记,并在代码中设置或获取它。通过将
viewWithTag:
发送到树的根目录,可以在视图树中搜索具有给定标记的视图。例如,你可以给你的
labelTime
查看标签57,在你的代码中,你会发现这样的视图:

UILabel *label = (UILabel *)[cell viewWithTag:57];
使用标签的缺点是,您必须在nib和代码之间保持标签号的同步。如果它们不同步,您要么返回错误的视图,要么返回nil(因为您可以向nil发送消息,所以发生这种情况时系统不会给您错误)。尽管如此,标签还是非常方便,所以像这样使用它们是很常见的

另一种方法是为每个自定义子视图创建带有
IBOutlet
属性的
UITableViewCell
自定义子类。您可以将插座连接到nib中的子视图,并通过代码中的属性访问子视图:

MyTableViewCell *myCell = (MyTableViewCell *)cell;
UILabel *label = cell.labelTime;

这需要编写比使用标记多得多的样板文件,但它的优点是,如果nib和代码不同步,您将收到警告或错误(无论是在编译时还是首次尝试加载nib时)


确保在自定义单元格的属性检查器中设置标识符值。在标识检查器中设置自定义单元格的还原ID是错误的,我就是这么做的。我自己的主要facepalm。

有关如何使用mservidio和rob描述的方法实现的更多详细信息,请查看中的“设计我们自己的原型单元”一节

是我,这简直太简单了!是的,大约一周前我自己才意识到这个用法,觉得它非常好而且很快。太好了。。如果有人尝试使用这种方法,请记住,很难理解标签为57的视图的含义。最好将UITableViewCell子类化。