如果文本为空,UITableViewCell detailTextLabel 不支持 KVO?苹果漏洞?
Posted
技术标签:
【中文标题】如果文本为空,UITableViewCell detailTextLabel 不支持 KVO?苹果漏洞?【英文标题】:UITableViewCell detailTextLabel not honoring KVO if text is empty? Apple bug? 【发布时间】:2012-06-16 21:09:50 【问题描述】:我在配置了正确细节的表格视图单元格时遇到了奇怪的行为。单元格是一个静态单元格,它是在情节提要中创建的表格视图控制器的一部分。在我的视图控制器中,我创建了一个连接到单元格详细信息的IBOutlet UITextField *detail
。到现在为止还挺好。视图被配置为当单元格的附件被击中时,另一个控制器被推送到堆栈上,以便用户可以输入要显示的文本。返回时,detail.text 被设置为用户的字符串。我依靠 IBOutlet 和情节提要中的细节之间的 KVO 进行自动更新。
问题是,如果detail.text
在进入视图时设置为@""(空字符串,不是零),则无论用户多少次,单元格的详细信息都将不会更新更改文本。我可以通过调试器看到细节反映了用户的更改,但单元格没有。奇怪的是,如果我离开视图并重新输入,以便将 detail.text 初始化为一些非空字符串,一切都很好。如果 detail.text 的初始值不是空字符串,则不会发生此问题。用户可以随意更改文本,返回时单元格会反映更改。
Apple 错误,还是我遗漏了什么?
问候,
--约翰
【问题讨论】:
你为什么不帮我解决这个问题..... 我发现了同样的问题。 KVO 没有为空字符串启动。 【参考方案1】:当必须重新绘制单元格时,只需重新加载即可。
[tableView reloadData];
【讨论】:
我知道这是一种解决方法,因为这就是我目前正在解决的问题。但是潜在的问题仍然存在 - 当初始文本为空字符串时它不起作用。这是为什么呢? 如果不刷新单元格,它不应该工作。它正在更新是不稳定的,而不是它没有更新 - 但那又怎样?所以用reloadData
更新是正确的方法,而不是“变通”。【参考方案2】:
我发现将文本设置为 @" "(带空格)而不是 @"" 可以解决问题。下次您将使用非空字符串更新标签时,它将按预期更新。
【讨论】:
以上是关于如果文本为空,UITableViewCell detailTextLabel 不支持 KVO?苹果漏洞?的主要内容,如果未能解决你的问题,请参考以下文章
如果文本溢出,则在 UITableViewCell 中水平滚动 UITextField
为啥我的自定义 UITableViewCell 在 cellForRowAtIndexPath 中为空?