UIButton set titleLabel setValue(newLabel, forKeyPath: "titleLabel")
Posted
技术标签:
【中文标题】UIButton set titleLabel setValue(newLabel, forKeyPath: "titleLabel")【英文标题】: 【发布时间】:2018-08-18 09:27:28 【问题描述】:let newLabel = UILbael()
let button = UIButton()
button.setValue(newLabel, forKeyPath: "titleLabel")
崩溃信息
setValue:forUndefinedKey:]: this class is not key valuecoding-compliant for the key titleLabel
如果用kvc怎么办?
【问题讨论】:
你能展示你的代码吗? 你想达到什么目的? 您的问题含糊不清。你发布了一些没有意义的代码,然后说“怎么做”。 what 怎么做?用文字描述你正在尝试做的事情。您是否尝试将文本从标签“titleLabel”复制到另一个标签“newLabel”?您是否要复制标签的所有属性? (大小、位置、字体等) var button = button() set button.titlelabel 使用 kvc 你的问题仍然是一团糟。包含 2 个按钮的变量是什么?第一个按钮是如何创建的?newLabel
是标签,还是希望将一个按钮的按钮标题复制到另一个?
【参考方案1】:
您应该使用setTitle
方法为状态设置按钮标题。
button.setTitle("Your button title here", for: .normal)
setValue(_:forKeyPath:) 是 NSObject
类的方法,UIButton
是其子类。不推荐使用 KVO。阅读此thread 了解更多信息。
【讨论】:
仅供参考:UIButton 不是 NSObject 的子类,它继承自 UIControl @IraniyaNaynesh UIButton -> UIControl -> UIView -> UIResponder ->NSObject. 每个类都是 NSObject 的子类:-p @IraniyaNaynesh 是的,大多数 UIKit 对象都是。有没有一个词可以说子类的子类的子类的子类?不知道有没有。 :x var button = button() set button.titlelabel 使用 kvc【参考方案2】:KVC 仅支持 NSObjects,Apple 似乎在 Swift 中逐步淘汰它。我不建议使用 KVC 进行新开发。
您也不应该使用按钮的titleLabel
来设置按钮的标题。引用 UIButton 上的 Apple 文档:
要设置标签的实际文本,请使用
setTitle(_:for:)
(button.titleLabel.text 不允许你设置文本)。
如果您有两个按钮,firstButton
和 secondButton
,并且您尝试将标题从第一个复制到第二个,您的代码可能如下所示:
let title = firstButton.title(forState: .normal)
secondButton.setTitle(title, for: .normal)
【讨论】:
【参考方案3】:我认为你没有在你的 ViewController 中确认你的插座,这是使用按钮和设置标题时 ViewController 中没有任何按钮引用的原因。这就像在没有任何初始化的情况下使用任何对象。因此,请确保并检查按钮插座。请查看代码,以便我们确定什么是实际问题。
【讨论】:
var button = button() set button.titlelabel 使用 kvc以上是关于UIButton set titleLabel setValue(newLabel, forKeyPath: "titleLabel")的主要内容,如果未能解决你的问题,请参考以下文章
根据 titleLabel 的长度调整 UIButton 的大小