【发布时间】:2016-08-04 16:40:47
【问题描述】:
我将UIButton 子类化为CheckBox...下面的代码似乎可以在故事板上工作(根据在线教程)但是当我尝试通过代码添加它时它不起作用...
class CheckBox: UIButton {
// Images
let checkedImage = UIImage(named: "Checked.png")! as UIImage
let uncheckedImage = UIImage(named: "Unchecked.png")! as UIImage
// 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: #selector(CheckBox.buttonClicked(_:)), forControlEvents: UIControlEvents.TouchUpInside)
self.isChecked = false
}
func buttonClicked(sender: UIButton) {
if sender == self {
isChecked = !isChecked
}
}
}
这是我在ViewController 上用来添加复选框的代码:
let checkbox = CheckBox(frame: CGRect(x: 5, y: 5, width: 40, height: 40))
print(checkbox.isChecked)
view.addSubview(checkbox)
问题是CheckBox 没有被显示。如果我给它一个背景,在框架初始化下,我可以看到正方形,但是如果我点击它时没有任何反应。即使在buttonClicked 方法中添加了打印消息之后。
我在 awakeFromNib 方法中添加了打印语句,但它从未被调用...
【问题讨论】:
-
你能调用 awakeFromNib 的超级实现,让父类有机会执行它们需要的任何额外初始化吗?虽然这个方法的默认实现什么都不做,但是很多 UIKit 类都提供了非空的实现。您可以在自己的 awakeFromNib 方法中随时调用超级实现。
-
您是否在 cellForRowAtIndexPath 中进行设置?由于 tableview 正在恢复单元格,因此您需要每次更新按钮
-
@KuntalGajjar 代码中的任何地方都没有使用任何表。
-
@idindu 在 awakeFromNib 覆盖的顶部调用 super.awakeFromNib() 不会改变任何东西。
-
@crubio 知道如何解决这个问题吗?
标签: ios swift uibutton ios9 subclass