Swift – 重写UButton setSelected
我在Swift中创build一个UIButton子类,以便在select时执行自定义绘图和animation
在重写的Swift中等效于什么- (void)setSelected:(BOOL)selected
在ObjC中- (void)setSelected:(BOOL)selected
?
我试过了
override var selected: Bool
所以我可以实现一个观察员,但我明白了
Cannot override with a stored property 'selected'
像其他人提到的,您可以使用willSet
来检测更改。 但是,在重写中,您不需要将该值分配给super,只是观察现有的更改。
你可以在下面的操场上观察几件事情:
- 覆盖
willSet/didSet
的属性仍然会调用get/set
超级属性。 你可以说因为状态从.selected
。 - 即使当值不变时,也会调用willSet和didSet,因此您可能需要将
selected
的值与willSet
newValue
或willSet
oldValue
进行didSet
以确定是否进行animation制作。
import UIKit class MyButton : UIButton { override var isSelected: Bool { willSet { print("changing from \(isSelected) to \(newValue)") } didSet { print("changed from \(oldValue) to \(isSelected)") } } } let button = MyButton() button.state == .normal button.isSelected = true // Both events fire on change. button.state == .selected button.isSelected = true // Both events still fire.
你会像这样做:
class MyButton : UIButton { // ... override var isSelected: Bool { willSet(newValue) { super.isSelected = newValue; // do your own business here... } } // ... }
尝试这个
override public var selected: Bool { willSet(selectedValue) { self.selected = selectedValue // Do whatever you want } }
创buildIBAction和检查buttonselect或不是在迅速的语言。
@IBAction func favoriteButtonAction(sender: UIButton) { // Save Data sender.selected = !sender.selected; if (sender.selected) { NSLog(" Not Selected"); } else { NSLog(" Selected"); } }