UILabels 和自定义 UITableView 单元格

Posted

技术标签:

【中文标题】UILabels 和自定义 UITableView 单元格【英文标题】:UILabels and custom UITableView cells 【发布时间】:2016-04-27 17:22:06 【问题描述】:

我在情节提要中创建了一个自定义 UITableView 单元格。以前我对单元格使用“字幕”样式,但现在我使用的是由 2 个 UILabel 组成的自定义设计。

我现在如何访问这些 UILabel?在我使用这两个自定义 UILabel 之前,我只会使用:

 let cell = tableView.dequeueReusableCellWithIdentifier("Cell", forIndexPath: indexPath)


 cell.textLabel?.text = pollContent 
 cell.detailTextLabel?.text = dateString

    override func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell 

方法

但由于单元格样式现在设置为“自定义”,我真的不能再这样做了。 我遇到的问题是我真的不知道如何使用 IBOutlets 以某种方式将这两个 UILabel 连接到我的 ViewController 类?

我还创建了一个自定义 UITableViewCell 类并将 UILabel 连接到该类,但是如何从 ViewController 获取每个单元格的 UILabel 内容?

更新: 所以我现在用我的自定义 UITableViewCell 投射单元格,并将以下代码行添加到我的类中:

    self.textLabel = titleLabel
    self.detailTextLabel = subTitleLabel

titleLabel 和 subTitleLabel 都是我的 UILabel。

但我收到错误消息,指出 .textLabel 和 .detailTextLabel 都是仅获取属性。

更新 2: 感谢您的所有回答/建议。正如您可能猜到的那样,我仍然是编程新手!

我解决问题后会回来。

更新 3:再次感谢您的帮助!它现在终于可以工作了。

【问题讨论】:

1.你需要创建一个UITableViewCell类。将您的 IBOutlets 添加到此自定义类。设置单元格 creating custom tableview cells in swift的可能重复 这些都不能解决我的问题@AlessandroOrnano 您只需为标签设置标签。然后通过 '[cell viewWithTag:tag]' 获取它们 @efimovD 但这些标签不应该只适用于 UIViews 吗? 【参考方案1】:

您需要将该单元格转换为您的自定义单元格。

 let cell = tableView.dequeueReusableCellWithIdentifier("Cell", forIndexPath: indexPath) as? CustomTableViewCell


 cell.customLabel1.text = pollContent 
 cell.customLabel2.text = dateString

【讨论】:

感谢您的快速回复!我一定遗漏了一些东西,UILabels 仍然只显示默认文本。单元格如何知道 textLabel 和 detailTextLabels 正在引用我的 UILabel? 确保您在 Storyboards 中的单元格设置为自定义单元格。然后为自定义单元格创建文件的出口。 .textLabel 和 .detailTextLabel 都是 get-only 属性。 请发布您的完整自定义单元格文件。你不应该去 self.titleLabel 等。 @user3545063 我刚刚更新了这个答案(等待同行评审)。代码显示您应该使用 cell.textLabel?和 cell.detailTextLabel?。调用它仍然会在单元格的默认标签中显示文本,因为您的单元格设置为“自定义”并且您不会收到错误,因为 textLabel 和 detailTextLabel 没有强制展开(有?而不是!) .您将需要使用 cell.customLabel 来访问自定义标签的文本。希望这会有所帮助!【参考方案2】:

1.您需要创建一个扩展UITableViewCell 的CustomUITableViewCell 类。

2.将您的 IBOutlets 添加到此 CustomUITableViewCell。

3.将 Cell 类设置为您刚刚在情节提要中创建的 CustomUITableViewCell。

4.改变这个

    let cell = tableView.dequeueReusableCellWithIdentifier("Cell", forIndexPath: indexPath) as CustomUITableViewCell 

    cell.textLabel?.text = pollContent 
    cell.detailTextLabel?.text = dateString

【讨论】:

【参考方案3】:

请尝试:

self.textLabel.text = titleLabel
self.detailTextLabel.text = subTitleLabel

用于在这些标签中设置文本。

【讨论】:

【参考方案4】:

看来您还必须在 Attribute Inspector 中设置单元格标识符:

【讨论】:

【参考方案5】:

为您的 uilabels 标签属性设置一些唯一值。

稍后在获取它们

cellForItemAtIndexPath

像这样:

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

顺便说一句:当单元格的样式为Custom 时,不要尝试分配 textLabel 和 detailTextLabel。它们仅在样式为 Subtitle 时可用。否则,它们为零。

【讨论】:

以上是关于UILabels 和自定义 UITableView 单元格的主要内容,如果未能解决你的问题,请参考以下文章

UIRefreshControl 带有两个异步 json 下载来填充 UITableView 行和自定义标题视图

从iOS中的json动态创建UITableView中的UILabels?

UITableView动态单元格高度仅在某些滚动后才能正确显示

UITableView 中 UILabel 的大小类随机忽略

向 uitabelviewcell 添加多个 uilabels 时无法正确设置布局

UICollectionView/UITableView 通用应用