Reputation: 8629
I am having a strange problem with UIButton. I have the following custom class:
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
}
}
In the interface builder I set the inspectable vars, let's say I set someString
to hello. Now when I run the app and view the log the print
for the var is ""
. Also I am unable to set the images. It only uses the default values and will not use the new value that I set. What am I doing wrong here?
Upvotes: 2
Views: 351
Reputation: 166
Try this:
@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
}
}
Upvotes: 2