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 的大小类随机忽略