我正在尝试创建一个自定义的UIButton子类,它在normal、selected和disabled状态中具有不同的颜色。我的按钮位于一个框架中,然后被导入到一个应用程序中,但是我在这里放置的每一个代码片段,我都在主应用程序和框架中尝试过--我知道它不会有任何区别,但我想覆盖我的基础。我不能用它来救我的命。
class BrokenButton: UIButton {
override var isEnabled: Bool {
didSet {
print("This is never called no matter what I do")
}
}
}我尝试使用KVO来观察isEnabled的值,因为重写setter没有工作:
class BrokenButton2: UIButton {
required init() {
super.init(frame: .zero)
addObserver(self, forKeyPath: #keyPath(isEnabled), options: [.new], context: nil)
}
override func observeValue(forKeyPath keyPath: String?, of object: Any?, change: [NSKeyValueChangeKey: Any]?, context: UnsafeMutableRawPointer?) {
print("Never called")
}
}我的智慧在这里结束了。我做错什么了?
发布于 2017-12-20 07:16:12
@ BrokenButton类位于框架内,因此需要使用open关键字从其他模块外部访问。因此,只需在BrokenButton类和isEnabled属性之前添加open关键字即可。
open class BrokenButton: UIButton {
override open var isEnabled: Bool {
didSet {
print("This is never called no matter what I do")
}
}
}在定义模块之外,开放类是可访问的和可子类的。在定义模块之外,打开的类成员是可访问的和可覆盖的。
有关open keyword..read this堆栈溢出回答的更多信息
发布于 2017-12-19 19:37:36
我觉得这和意义一样重要。这里是一些步骤,您可以采取的复制方法,它的工作。有可能你错过了这些步骤中的任何一步。
BrokenButton@IBOutlet weak var button: BrokenButton?button?.isEnabled = true
https://stackoverflow.com/questions/47892994
复制相似问题