normal
,selected
、およびdisabled
州に異なる色のカスタムUIButtonサブクラスを作成しようとしています。私のボタンは、アプリケーションにインポートされたフレームワーク内に存在しますが、私がここに配置するすべてのコードスニペットで、私はメインアプリケーションとフレームワークの両方で試してみました。何の違いもないはずですが、私の基地。私は私の人生を救うために働くことができません。UIButtonで 'isSelected'または 'isEnabled'をオーバーライドすると、
class BrokenButton: UIButton {
override var isEnabled: Bool {
didSet {
print("This is never called no matter what I do")
}
}
}
私はセッターが機能しなかったため、上書きisEnabled
の値を見るためにKVOを使用して試してみた:
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")
}
}
私はここに私のウィットの終わりです。これについて何が間違っていますか?
に答えるのstackoverflow。ストーリーボードまたはxibを使用している場合は、SubclassタイプをBrokenButtonに変更してください。 – suhit
ボタンの状態を変更しようとしましたか?例えばisSelected put.isSelected =!button.isボタンアクション内でputSelectedを実行すると、didSetの開始が状態の変化を認識します。 – Mateusz
KVOを使用する場合は、obj-cランタイムを使用しています。 'isEnabled'は' enabled'にする必要があります。 のprintButton.observe(\ BrokenButton2.enabled、options:[.new、.old、.initial]){(button、_)} } 'うまく動作しますあなたの 'didSet'プロパティ監視コードと同じように。 – beyowulf