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 不允许你设置文本)。

如果您有两个按钮,firstButtonsecondButton,并且您尝试将标题从第一个复制到第二个,您的代码可能如下所示:

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")的主要内容,如果未能解决你的问题,请参考以下文章

UIButton.titleLabel 阴影正在剪裁

为 UIButton 设置 titleLabel

更新 titleLabel UIButton

根据 titleLabel 的长度调整 UIButton 的大小

UIButton:根据titleLabel Text计算UIButton的高度

UIButton Outlet Set 标题 Swift