Подтвердить что ты не робот

Swift - UIButton overriding setSelected

Я делаю подкласс UIButton в Swift для выполнения пользовательского рисования и анимации при выборе

Каким будет эквивалент в Swift переопределения - (void)setSelected:(BOOL)selected в ObjC?

Я пробовал

override var selected: Bool

чтобы я мог реализовать наблюдателя, но я получаю

Cannot override with a stored property 'selected'

4b9b3361

Ответ 1

Как и многие другие, вы можете использовать willSet для обнаружения изменений. Однако при переопределении вам не нужно присваивать значение супер, вы просто наблюдаете существующее изменение.

Несколько вещей, которые вы можете наблюдать со следующей игровой площадки:

  • Переопределение свойства для willSet/didSet по-прежнему вызывает super для get/set. Вы можете сказать, что состояние изменяется от .normal до .selected.
  • willSet и didSet вызывается, даже когда значение не изменяется, поэтому вы, вероятно, захотите сравнить значение selected с newValue в willSet или oldValue в didSet, чтобы определить, или не анимировать.
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.

Ответ 2

вы сделали бы это, например, например. это:

class MyButton : UIButton {

    // ...

    override var isSelected: Bool {
        willSet(newValue) {
            super.isSelected = newValue;
            // do your own business here...
        }
    }

    // ...

}

Ответ 3

попробуйте это

override public var selected: Bool {
    willSet(selectedValue) {
        self.selected = selectedValue
        // Do whatever you want
    }
}

Ответ 4

Создайте кнопку IBAction и кнопку выбора, выбранную или нет, на быстром языке.

@IBAction func favoriteButtonAction(sender: UIButton) {

    // Save Data
    sender.selected  = !sender.selected;

    if (sender.selected)
    {
        NSLog(" Not Selected");
    }
    else
    {
        NSLog(" Selected");
    }

}