iPhone-如何将Storyboard与自定义UITableView单元格和CellWithIdentifier一起使用

时间:2012-01-25 20:48:01

标签: iphone uitableview

我正在尝试使用新的Storyboard设计器和绘制UITableView单元的简易性,而不是以编程方式“设计”每一行。

标准单元格的一个很好的例子在这里链接堆栈溢出: iPhone - dequeueReusableCellWithIdentifier usage

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

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

[[[cell subviews] getObjectByID:@"labelTime"] setText:@"Whatever"];

我对API的期望是完全错误还是我没有找到合适的API呢?

任何想法或建议?

4 个答案:

答案 0 :(得分:31)

对于您在storyboard中创建的每个新自定义UITableViewCell,您将需要创建一个新的类文件,该文件实现UITableViewCell以将其链接到。确保将您在storyboard中布局的新单元格中的所有控件映射到实例属性。然后你就可以像往常一样出局:

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

答案 1 :(得分:8)

您可以通过两种方式访问​​自定义子视图。更简单的方法是使用标签。每个视图都有一个tag属性,它是一个整数。您可以在笔尖中设置标记,并在代码中设置或获取标记。通过将viewWithTag:发送到树的根目录,可以在视图树中搜索具有给定标记的视图。因此,举例来说,您可以将labelTime视图标记为57,在代码中,您会找到如下视图:

UILabel *label = (UILabel *)[cell viewWithTag:57];

使用标签的缺点是您必须使标签号在您的笔尖和代码之间保持同步。如果它们不同步,你将得到错误的视图或者你将得到nil(因为你可以发送消息为nil,系统不会在发生这种情况时给你一个错误)。不过,标签非常方便,因此使用它们非常常见。

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

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

这需要编写比使用标签更多的样板文件,但它的优势在于,如果您的笔尖和代码出来,您将收到警告或错误(无论是在编译时还是在您第一次尝试加载nib时)同步。

答案 2 :(得分:6)

不要像我一样忙碌。 :)

确保在自定义单元格的属性检查器中设置标识符值。在 Identity Inspector 中设置自定义单元格的恢复ID 是错误的方法,这正是我所做的。我自己的主要面孔。

答案 3 :(得分:0)

有关如何操作的更多实现细节,使用mservidio和rob描述的方法,请查看this tutorial中的“设计我们自己的原型单元”部分。