在情节提要中连接 Cell Prototype 的插座

Posted

技术标签:

【中文标题】在情节提要中连接 Cell Prototype 的插座【英文标题】:Connect outlet of a Cell Prototype in a storyboard 【发布时间】:2012-04-27 21:53:19 【问题描述】:

我是故事板的新手,所以我遇到了一些困难......

我创建了一个 TableViewController,我想自定义 Cell 原型。在单元原型中,我添加了几个标签,我想用我自己的继承自 UITableViewCell (AreaListCell) 的类进行自定义。 在情节提要中,对于单元原型,我已将自定义类配置为“AreaListCell”,其样式为“自定义”。

在情节提要中,当我选择 Cell Prototype 和助手时,助手会显示我的实现 UITableViewController (AreasTableViewController) 的类而不是 我的“AreaListCell”类。

结果是我可以创建出口(使用 Ctrl + 从 Cell Prototype 的标签拖动)到 AreasTableViewController 类,但不能创建到 AreaListCell 类! 知道如何将 Cell Prototype 与我的 AreaListCell 类连接起来吗?

感谢您的帮助!

【问题讨论】:

【参考方案1】:

更新:从 Xcode 4.6(可能更早)开始,您现在可以通过控制拖动来创建插座! - 这必须在接口部分或类扩展中完成(默认情况下,新单元子类的类扩展不存在。感谢 Steve Haley 指出这一点。

无法通过在助手编辑器中拖入代码块来自动连接和创建插座,这很糟糕,但是您可以手动创建插座然后连接它们。

在您的单元子类界面中:

@interface CustomCell : UITableViewCell

@property (nonatomic) IBOutlet UILabel* customLabel;

@end

在实现中正常合成。

在故事板中,选择单元格并转到连接检查器,您将看到新的插座。从那里拖到原型中的相关元素:

现在可以在 cellForRowAtIndexPath: 方法中以 cell.customLabel 的身份访问它。

【讨论】:

我曾经对我的单元格这样做,但突然它停止工作,我的 customLabel IBOutlet == nil,并且它没有出现在单元格中。问题的原因可能是什么?在 storiboard 插座已连接。 TLDR:以编程方式创建一个插座,并通过控制+从情节提要中拖动来连接它【参考方案2】:

是的,您不能使用 ctrl+drag 方法连接自定义原型单元内的视图。而是使用视图的标签属性,然后在构建单元格时使用它们的标签拉出标签。

这里:

//Let's assume you have 3 labels.  One for a name, One for a count, One for a detail
//In your storyboard give the name label tag=1, count tag=2, and detail tag=3


- (UITableViewCell *) tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath

    CustomTableViewCell *theCell = [tableView dequeueReusableCellWithIdentifier:@"Prototype Cell"];

    UILabel *nameLabel = (UILabel *)[theCell viewWithTag:1];
    UILabel *countLabel = (UILabel *)[theCell viewWithTag:2];
    UILabel *detailLabel = (UILabel *)[theCell viewWithTag:3];

    nameLabel.text = @"name";
    countLabel.text = @"count";
    detailLabel.text = @"details";

    return theCell;

您还可以在自定义单元格代码中将标签设置为属性,然后在初始化单元格时使用 viewWithTag 调用将标签属性分配给您在情节提要上创建的标签。

我花了几天时间才意识到我无法从自定义单元格中按 ctrl+拖动来创建 IBOutlet。

祝你好运!

编辑:您可以在自定义单元格内为您的标签创建 IBOutlets 并以编程方式创建链接,而不是通过 ctrl+drag 方法。

编辑2:我完全错了,你可以ctrl+drag。请参阅此问题的第二个答案。这很棘手,但效果很好。

【讨论】:

您当然可以将原型中的插座连接到用作原型的单元子类。一旦我能找到一个例子,我会详细回答。 好的,您不能通过控制拖动到助手来自动创建插座,但您可以手动创建插座并连接它们。您当然不需要使用标签。不过投票有点多,如果您编辑答案,我将删除它(除非您编辑,否则我现在无法更改投票) 我不建议使用标签,因为您需要单独维护它们,这更容易出错。【参考方案3】:

斯威夫特 3

// 如果您的图像在服务器上,我们将使用它。

// 我们从一个 url 获取图像。

// 你可以从你的 Xcode 中设置图像。

    图像的 URL 在数组中 name = thumbnail 即 self.thumbnail[indexPath.row] 在 UITableviewCell 上将 imageView 放在单元格上

    选择 UIimageView 从情节提要中为其分配一个标签。

    let pictureURL = URL(string: self.thumbnail[indexPath.row])!
    let pictureData = NSData(contentsOf: pictureURL as URL)
    let catPicture = UIImage(data: pictureData as! Data)
    var imageV = UIImageView()
    imageV = cell?.viewWithTag(1) as! UIImageView
    imageV.image = catPicture
    

【讨论】:

以上是关于在情节提要中连接 Cell Prototype 的插座的主要内容,如果未能解决你的问题,请参考以下文章

无法使具有标识符 Cell 的单元出队 - 必须为标识符注册一个 nib 或一个类,或者在情节提要中连接一个原型单元

没有情节提要的 TableView Cell 的 iOS Swift Segue

从 Table View Cell xib 与披露指示符转至情节提要

如何使用情节提要在 Tableview Cell 中为 2 个标签和一个图像视图设置约束?

如何从情节提要中获取 imageView 的大小?

我如何在情节提要中使用原型单元和搜索结果控制器