UITableViewCell detailTextLabel 未显示
Posted
技术标签:
【中文标题】UITableViewCell detailTextLabel 未显示【英文标题】:UITableViewCell detailTextLabel not showing up 【发布时间】:2015-12-05 03:59:55 【问题描述】:在 Swift 中使用 UITableView
及其 UITableViewCell
(s)。我在显示 UITableViewCell
的 detailTextLabel
字段时遇到了一些问题。
我已经找到了这两个有用的帖子,但无法获得完全有效的解决方案: swift detailTextLabel not showing up How to Set UITableViewCellStyleSubtitle and dequeueReusableCell in Swift?
这是我正在使用的代码,与我的问题相关:
override func viewDidLoad()
super.viewDidLoad()
………….
theTableView = UITableView(frame: tmpFrame)
………….
theTableView.registerClass(UITableViewCell.self, forCellReuseIdentifier: "reuseIdentifier")
theTableView.dataSource = self
theTableView.delegate = self
self.view.addSubview(theTableView)
func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell
var cell = tableView.dequeueReusableCellWithIdentifier("reuseIdentifier", forIndexPath: indexPath)
cell.backgroundColor = UIColor.clearColor()
cell.textLabel?.text = "THE-TEXT-LABEL"
cell.detailTextLabel?.text = "KIJILO" // This does not show up.
return cell
当我尝试使用UITableViewCell
的detailTextLabel
字段时,它没有出现。在网上搜索,我知道我必须为单元格使用正确的样式(UITableViewCellStyle
),但我不知道如何将该更改集成到我的代码中。我看到的示例是基于子类化UITableViewCell
,我想我不需要子类化UITableViewCell
只是为了使用detailTextLabel
字段。如果我错了,请告诉我。
我也尝试了上面提到的帖子中的一些东西,但没有任何效果。
【问题讨论】:
您需要您发布的第二个链接中的代码,但前提是您删除了theTableView.registerClass(UITableViewCell.self, forCellReuseIdentifier: "reuseIdentifier")
行的使用。
【参考方案1】:
你已经注册了 UITableViewCell
theTableView.registerClass(UITableViewCell.self,
forCellReuseIdentifier: "reuseIdentifier")
这意味着当你调用时
tableView.dequeueReusableCellWithIdentifier("reuseIdentifier",
forIndexPath: indexPath)
将使用 UITableViewCellStyleDefault 样式自动为您创建一个。
因为您想要自定义样式,所以您需要做一些事情:
删除
theTableView.registerClass(UITableViewCell.self,
forCellReuseIdentifier: "reuseIdentifier")
替换
var cell = tableView.dequeueReusableCellWithIdentifier("reuseIdentifier",
forIndexPath: indexPath)
以下
var cell = tableView.dequeueReusableCellWithIdentifier("reuseIdentifier")
if cell == nil
cell = UITableViewCell(style: .Value1, reuseIdentifier: "reuseIdentifier")
这里发生的情况是dequeueReusableCellWithIdentifier
如果无法将单元格出列,将返回 nil。然后,您可以生成自己的单元格,并提供指定的样式。
【讨论】:
我希望我能反刍给你+10..!谢谢你..!tableView.dequeueReusableCellWithIdentifier
在更好的情况下总是返回 nil,在更坏的情况下 detailTextLabel
是 nil
解决了。注册tableview cell take cell = UITableViewCell() 从不调用
赞成。这种方法没有任何问题,虽然它不是 hack,但它只是 看起来 像 hack,
如果您有自定义单元格,那么您所要做的就是:var cell = tableView.dequeueReusableCellWithIdentifier("customReuseIdentifier") if cell == nil cell = CustomCell(style: .Value1, reuseIdentifier: "customReuseIdentifier")
【参考方案2】:
如果您使用的是Storyboard
:
-
选择一个单元格
转到属性检查器
点击样式
选择
Subtitle
【讨论】:
【参考方案3】:我发现仅仅检查cell
是不是nil.
是不够的,我添加了这个额外的检查:
var cell: UITableViewCell? = tableView.dequeueReusableCell(withIdentifier: cellReuseIdentifier, for: indexPath)
if cell == nil || cell?.detailTextLabel == nil
cell = UITableViewCell(style: .subtitle, reuseIdentifier: cellReuseIdentifier)
【讨论】:
这和我想的不一样【参考方案4】:很好的答案,谢谢!我唯一要补充的是,如果您想要不同样式的细节视图(我正在寻找 .subtitle),您需要执行以下操作:
cell = UITableViewCell(style: .subtitle, reuseIdentifier: "reuseIdentifier")
其中:CellStyle : Int
case `default` = 0
case value1 = 1
case value2 = 2
case subtitle = 3
【讨论】:
以上是关于UITableViewCell detailTextLabel 未显示的主要内容,如果未能解决你的问题,请参考以下文章
突出显示的 UITableViewCell 和选定的 UITableViewCell 有啥区别?
斯威夫特 - UITableViewCell?不能转换为 UITableViewCell
UITableViewCell 上的动画按钮而不影响其他 UITableViewCell