detailTextLabel最初没有显示

时间:2012-03-30 13:54:07

标签: iphone uitableview

我正在使用静态UITableview,在故事板中设置。对于某些单元格(Style = Right detail),我在viewWillAppear中设置了detailTextlabel.text,如下所示:

   self.recentProductsCell.detailTextLabel.text = description;

对于此单元格,标签不会出现。如果我NSLog它显示的文本是好的。 我检查了detailTextLabel没有被隐藏。 我没有改变故事板中的任何其他属性。 该单元格有一个detailDisclosure附件,但将其设置为其他东西并没有帮助。

然后奇怪的是: 如果我运行并且detailTextlabel没有显示,我通过点击它并移动我的手指来选择该行。从那时起,detailTextLabel确实显示了!即使隐藏和重新显示视图,标签仍然可见。但是,在代码中重置和设置它会使标签再次消失。

我可能做错了什么,或者这是一个错误?

编辑:检查5.0和5.1,同样的行为。 我通过在viewWillAppear中的代码中选择和取消选择此行找到了一个丑陋的解决方法。所以我补充道:

[self.tableView selectRowAtIndexPath:[NSIndexPath indexPathForRow:3 inSection:0] animated:NO scrollPosition:UITableViewScrollPositionNone];
[self.tableView deselectRowAtIndexPath: [NSIndexPath indexPathForRow:3 inSection:0] animated:NO];

它可以工作,但我可以看到正在选择和取消选择的行。所以我也改变了selectionStyle,但现在这个行在显示视图时闪烁。

额外评论:在同一个viewWillAppear中,我设置了其他静态单元格的detailLabel,它们显示得很好。

7 个答案:

答案 0 :(得分:8)

我确实发现detailLabel没有显示,不是为什么,恕我直言,这是一个错误。

如果detailLabel.Text的先前值为nil或空字符串,则在将其设置为新值后,detailLabel不会显示。 如果我将detailLabel设置为nil / empty(最初)以外的任何值,然后将其设置为其他值,则会正确显示新值。

没有显示的原因可能更复杂,然后才变为空,但在我的情况下,这解决了我的问题。如果我希望它为“空”,我可以在背景颜色中显示detailLabel。

答案 1 :(得分:5)

我有这个问题的副本。相同配置 - 故事板中的静态单元格,但具有左侧详细信息单元格。我也看到了触摸细胞使其可见的问题。

我通过将故事板中的初始详细标签内容设置为单个空间来解决这个问题。在代码中设置实际的详细标签内容后,我将sizeToFit消息发送到详细信息标签。

答案 2 :(得分:0)

尝试设置单元格样式=副标题

答案 3 :(得分:0)

您正在将标签设置在错误的位置。

发布您的UITableViewDelegate / DataSource代码。您需要在cellForRowAtIndexPath:willDisplayCellAtIndexPath:

中设置此值

答案 4 :(得分:0)

您是否将所有控件添加到UITableViewCell的contentView?如果你只是将它添加到单元格中,这有时会导致不稳定的行为。

答案 5 :(得分:0)

我有同样的问题,我认为这是一个错误。 如果我按住线,我会看到detailTextLabel。

正如Bjinse所说,一般情况下,如果你将detailTextLabel先前设置为nil或"" (没有空格=空字符串)。

所以我结束了将我想要空的detailTextLabel设置为" " (带空格)。这对我有用。

答案 6 :(得分:0)

我发现它只发生在iPhone 6plus(8.4)上。

解决方案1(建议):

在不重复使用单元格之后,问题就解决了。

//var cell = tableView.dequeueReusableCellWithIdentifier(cellIdentifier)
//if cell == nil {
//    cell = UITableViewCell(style: .Value1, reuseIdentifier: cellIdentifier)
//}

var cell = UITableViewCell(style: .Value1, reuseIdentifier: cellIdentifier)

解决方案2:

因为我们滚动或触摸后会显示文字,所以我决定重新加载数据。这也有效,但是视图节目和detailText文本之间存在延迟。

override func viewDidAppear(animated: Bool) {
    super.viewDidAppear(animated)
    tableView.reloadData()
}