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

Pet*_*orn 13 iphone uitableview

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

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

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

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

[[[cell subviews] getObjectByID:@"labelTime"] setText:@"Whatever"];
Run Code Online (Sandbox Code Playgroud)

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

任何想法或建议?

mse*_*dio 31

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

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


rob*_*off 8

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

UILabel *label = (UILabel *)[cell viewWithTag:57];
Run Code Online (Sandbox Code Playgroud)

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

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

MyTableViewCell *myCell = (MyTableViewCell *)cell;
UILabel *label = cell.labelTime;
Run Code Online (Sandbox Code Playgroud)

这需要编写比使用标签更多的样板文件,但它的优势在于,如果您的笔尖和代码不同步,您将收到警告或错误(在编译时或首次尝试加载笔尖时).


Big*_*uce 6

不要像我一样忙碌.:)

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