IBDesignable для UIButton, переменные IBInspectable равны нулю

У меня странная проблема с UIButton. У меня есть следующий пользовательский класс:

import UIKit

@IBDesignable class ToggleButton: UIButton {

    @IBInspectable var state1Image: UIImage = UIImage()
    @IBInspectable var state2Image: UIImage = UIImage()
    @IBInspectable var someString: String = ""

    private var toogleOn: Bool = false {
        didSet {
            if toogleOn {
                isSelected = true
            } else {
                isSelected = false
            }
        }
    }

    override init(frame: CGRect) {
        super.init(frame: frame)
        setup()
    }


    required init?(coder aDecoder: NSCoder) {
        super.init(coder: aDecoder)
        setup()
    }

    private func setup() {
        print("test")
        print("some string is \(someString)")
    }

    @objc func didToggleButton() {
        toogleOn = !toogleOn
    }

}

В построителе интерфейса я установил проверяемые переменные, скажем, я установил someString на приветствие. Теперь, когда я запускаю приложение и просматриваю журнал, print для переменной равно "". Также я не могу установить изображения. Он использует только значения по умолчанию и не будет использовать новое значение, которое я установил. Что я здесь делаю неправильно?


person Kex    schedule 30.10.2018    source источник


Ответы (1)


Попробуй это:

@IBDesignable class ToggleButton: UIButton {
@IBInspectable var state1Image: UIImage = UIImage() {
    didSet {
        setup()
    }
}
@IBInspectable var state2Image: UIImage = UIImage() {
    didSet {
        setup()
    }
}
@IBInspectable var someString: String = "" {
    didSet {
        setup()
    }
}

override func prepareForInterfaceBuilder() {
    setup()
}

private func setup() {
    print("test")
    // Updating title label as someString to see the update
    self.titleLabel?.text =  someString
}

private var toogleOn: Bool = false {
    didSet {
        if toogleOn {
            isSelected = true
        } else {
            isSelected = false
        }
    }
}

override init(frame: CGRect) {
    super.init(frame: frame)
    setup()
}


required init?(coder aDecoder: NSCoder) {
    super.init(coder: aDecoder)
    setup()
}

@objc func didToggleButton() {
    toogleOn = !toogleOn
}
}
person vatsal rustagi    schedule 04.11.2018