iPhone-如何将 Storyboard 与自定义 UITableView 单元格和 CellWithIdentifier 一起使用
Posted
技术标签:
【中文标题】iPhone-如何将 Storyboard 与自定义 UITableView 单元格和 CellWithIdentifier 一起使用【英文标题】:iPhone- how to use Storyboard with custom UITableView cells and CellWithIdentifier 【发布时间】:2012-01-25 20:48:01 【问题描述】:我正在尝试利用新的 Storyboard 设计器和绘制 UITableView 单元格的便利性,而不是以编程方式“设计”每一行。
标准单元的一个很好的例子是在堆栈溢出处链接: iPhone - dequeueReusableCellWithIdentifier usage
我想在每一行的顶部使用我自己的标签、按钮和图像,而不是使用“[cell textLabel]”的链接方法。 因此,我创建了几个原型单元格/行并为它们分配了标识符(使用 Storyboard)。
现在:访问每一行的“自定义”控件/标签的最聪明的方法是什么?我尝试通过 ID 搜索访问它们,但没有找到任何东西。 我的想法是它应该沿着这条线工作:
[[[cell subviews] getObjectByID:@"labelTime"] setText:@"Whatever"];
我对 API 的期望是完全错误的,还是我还没有找到正确的 API?
有什么想法或建议吗?
【问题讨论】:
【参考方案1】:对于您在情节提要中创建的每个新的自定义 UITableViewCell,您将需要创建一个新的类文件,该类文件实现 UITableViewCell 以将其链接到。确保将您在情节提要中布局的新单元格中的所有控件映射到实例属性。然后你就可以像往常一样使用它来出列:
YourTableViewCellClass *cell = (YourTableViewCellClass*)[tableView dequeueReusableCellWithIdentifier:@"YourCellIdentifierStringDefinedInStoryBoard"];
// then set the properties for the class.
cell.labelTime = @"whatever";
【讨论】:
打我,这简直太简单了! 是的,我自己一个星期左右才意识到这个用法,发现它非常好用。 完美.. 感谢您的想法【参考方案2】:您可以通过两种方式访问自定义子视图。更简单的方法是使用标签。每个视图都有一个tag
属性,它是一个整数。您可以在 nib 中设置标签,并在代码中设置或获取它。您可以通过将viewWithTag:
发送到树的根来搜索具有给定标记的视图树。因此,例如,您可以为您的 labelTime
视图提供标签 57,然后在您的代码中,您会发现这样的视图:
UILabel *label = (UILabel *)[cell viewWithTag:57];
使用标签的缺点是您必须在 nib 和代码之间保持标签编号同步。如果它们不同步,你要么得到错误的视图,要么得到 nil(因为你可以向 nil 发送消息,当这种情况发生时系统不会给你一个错误)。尽管如此,标签还是很方便的,这样使用它们是很常见的。
另一种方法是创建UITableViewCell
的自定义子类,并为每个自定义子视图创建一个IBOutlet
属性。您可以将插座连接到 nib 中的子视图,并通过代码中的属性访问子视图:
MyTableViewCell *myCell = (MyTableViewCell *)cell;
UILabel *label = cell.labelTime;
这需要编写比使用标签更多的样板文件,但它的优点是如果你的 nib 和你的代码泄露,你会得到警告或错误(在编译时或当你第一次尝试加载 nib 时)同步。
【讨论】:
如果有人尝试使用此方法,请记住,很难理解 viewWithTag:57 的含义。子类化 UITableViewCell 要好得多。【参考方案3】:不要像我以前那样傻。 :)
确保在自定义单元格的 Attributes Inspector 中设置 Identifier 值。在 Identity Inspector 中设置自定义单元格的 Restoration ID 是错误的方法,而这正是我所做的。我自己的大脸。
【讨论】:
【参考方案4】:有关如何使用 mservidio 和 rob 描述的方法的更多实现细节,请查看this tutorial 中的“设计我们自己的原型单元”部分。
【讨论】:
以上是关于iPhone-如何将 Storyboard 与自定义 UITableView 单元格和 CellWithIdentifier 一起使用的主要内容,如果未能解决你的问题,请参考以下文章
5个步骤,将 storyboard 从 iphone 版转变为 ipad 版
如何在自动布局中设计 3x3 按钮支持所有使用 Storyboard 的 iPhone 设备
Xcode Storyboard - 如何在不同的 iPhone 屏幕尺寸之间更改元素的字体大小和位置
Interface Builder 无法打开文档“MainStoryboard_iPhone.storyboard”,因为它不存在