【问题标题】:iOS 9 Swift UIButton CheckBox subclass not showing imageiOS 9 Swift UIButton CheckBox 子类不显示图像
【发布时间】: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


【解决方案1】:

固定.. AwakeFromNib 显然不会在没有 Storyboard 的情况下被调用,所以我必须实现一个便利的初始化程序。

【讨论】:

    猜你喜欢
    • 2012-04-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-07-21
    • 1970-01-01
    相关资源
    最近更新 更多