Swift - UIButton overriding setSelected

后端 未结 4 1644
心在旅途
心在旅途 2020-12-16 09:53

I\'m making a UIButton subclass in Swift to perform custom drawing and animation on selection

What would be the equivalent in Swift of overriding - (void)setSe

相关标签:
4条回答
  • 2020-12-16 10:29

    Like others mentioned you can use willSet to detect changes. In an override, however, you do not need assign the value to super, you are just observing the existing change.

    A couple things you can observe from the following playground:

    1. Overriding a property for willSet/didSet still calls super for get/set. You can tell because the state changes from .normal to .selected.
    2. willSet and didSet are called even when the value is not changing, so you will probably want do the compare the value of selected to either newValue in willSet or oldValue in didSet to determine whether or not to animate.
    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.
    
    0 讨论(0)
  • 2020-12-16 10:29

    try this

    override public var selected: Bool {
        willSet(selectedValue) {
            self.selected = selectedValue
            // Do whatever you want
        }
    }
    
    0 讨论(0)
  • 2020-12-16 10:32

    you'd do it like e.g. this:

    class MyButton : UIButton {
    
        // ...
    
        override var isSelected: Bool {
            willSet(newValue) {
                super.isSelected = newValue;
                // do your own business here...
            }
        }
    
        // ...
    
    }
    
    0 讨论(0)
  • 2020-12-16 10:50

    Create IBAction and check button selected or not in swift language.

    @IBAction func favoriteButtonAction(sender: UIButton) {
    
        // Save Data
        sender.selected  = !sender.selected;
    
        if (sender.selected)
        {
            NSLog(" Not Selected");
        }
        else
        {
            NSLog(" Selected");
        }
    
    }
    
    0 讨论(0)
提交回复
热议问题