如何以编程方式快速添加自定义UIButton
问题描述:
我能够创建自定义复选框按钮类。但是,当我尝试将按钮放在我的视图中时,我没有看到图像。设置背景颜色只需返回该尺寸的正方形。这里是我的添加盒代码:如何以编程方式快速添加自定义UIButton
let box:CheckBox = CheckBox()
box.frame = CGRectMake(screenSize.width/2, screenSize.height/2, 200, 200)
self.view.addSubview(box)
I created the class as follows:
class CheckBox: UIButton {
override init(frame: CGRect) {
super.init(frame: frame)
//other stuff
}
required init?(coder aDecoder: NSCoder) {
fatalError("init(coder:) has not been implemented")
}
// Images
let checkedImage = UIImage(named: "checked_checkbox")
let uncheckedImage = UIImage(named: "checkbox_unchecked_icon")
// Bool property
var isChecked: Bool = false {
didSet{
if isChecked == true {
self.setImage(checkedImage, forState: .Normal)
} else {
self.setImage(uncheckedImage, forState: .Normal)
}
}
}
override func awakeFromNib() {
self.addTarget(self, action: "buttonClicked:", forControlEvents: UIControlEvents.TouchUpInside)
self.isChecked = false
}
func buttonClicked(sender: UIButton) {
if sender == self {
if isChecked == true {
isChecked = false
} else {
isChecked = true
}
}
}
}
答
将您awakeFromNib
代码到你init()
。 awakeFromNib
仅在从nib/xib文件初始化时调用。
这永远不会被调用。你可以通过设置一个断点来测试它。
这是它应该如何看:
override init(frame: CGRect) {
super.init(frame: frame)
self.addTarget(self, action: "buttonClicked:", forControlEvents: UIControlEvents.TouchUpInside)
self.isChecked = false
}
这样,self.isChecked
被调用,图像设置,你会看到一个比一个灰色的框了。
你不是从XIB文件创建你的复选框实例,所以'awakeFromNib'永远不会被调用。 – Bastek
@Bastek在那里awakeFromNib内的代码应该去哪里? – DMop
请不要在您的问题中“修复”您的代码。如果您有答案,则需要将其**作为答案**发布,并保留完整的问题。 – meagar