IBDesignable для UIButton, IBInspectable переменные равны нулю - PullRequest
0 голосов
/ 30 октября 2018

У меня странная проблема с 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 для переменной равно "". Также я не могу установить изображения. Он использует только значения по умолчанию и не будет использовать новое значение, которое я установил. Что я здесь не так делаю?

1 Ответ

0 голосов
/ 04 ноября 2018

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

@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
}
}
...