首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在isSelected上重写“isEnabled”或“isEnabled”不起作用

在isSelected上重写“isEnabled”或“isEnabled”不起作用
EN

Stack Overflow用户
提问于 2017-12-19 18:19:33
回答 2查看 2.3K关注 0票数 1

我正在尝试创建一个自定义的UIButton子类,它在normalselecteddisabled状态中具有不同的颜色。我的按钮位于一个框架中,然后被导入到一个应用程序中,但是我在这里放置的每一个代码片段,我都在主应用程序和框架中尝试过--我知道它不会有任何区别,但我想覆盖我的基础。我不能用它来救我的命。

代码语言:javascript
复制
class BrokenButton: UIButton {
    override var isEnabled: Bool {
        didSet {
            print("This is never called no matter what I do")
        }
    }
}

我尝试使用KVO来观察isEnabled的值,因为重写setter没有工作:

代码语言:javascript
复制
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")
    }
}

我的智慧在这里结束了。我做错什么了?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2017-12-20 07:16:12

@ BrokenButton类位于框架内,因此需要使用open关键字从其他模块外部访问。因此,只需在BrokenButton类和isEnabled属性之前添加open关键字即可。

代码语言:javascript
复制
open class BrokenButton: UIButton {
    override open var isEnabled: Bool {
        didSet {
            print("This is never called no matter what I do")
        }
    }
}

在定义模块之外,开放类是可访问的和可子类的。在定义模块之外,打开的类成员是可访问的和可覆盖的。

有关open keyword..read this堆栈溢出回答的更多信息

票数 3
EN

Stack Overflow用户

发布于 2017-12-19 19:37:36

我觉得这和意义一样重要。这里是一些步骤,您可以采取的复制方法,它的工作。有可能你错过了这些步骤中的任何一步。

  1. 创建BrokenButton类,它是UIButton的子类。就像你在上述问题中所做的那样。
  2. 打开故事板或xib,并将UIButton拖到情节提要或xib中。
  3. 选择刚才拖到情节提要/xib中的UIButton,在“标识”检查器中,确保将类BrokenButton
  4. 在ViewController中创建一个出口,如下所示:@IBOutlet weak var button: BrokenButton?
  5. 在故事板/xib中,连接检查器,将按钮连接到IBOutlet
  6. 然后,在视图控制器中,将按钮设置为启用或禁用,如下所示:button?.isEnabled = true
  7. 在这里,它在工程中。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/47892994

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档