以编程方式将类添加到Swift中的UIbutton

时间:2015-07-05 01:29:27

标签: iphone swift uibutton

我是Swift的新手,对于如何以编程方式将自定义类添加到按钮感到困惑。我创建了一个自定义类,可以使用故事板添加它。它工作正常,但如何以编程方式完成?

enter image description here

我可以使用CheckBox类代替UIButton,还是需要使用UIButton并添加类?

班级

class CheckBox: UIButton {

//images
let checkedImage = UIImage(named: "checked_checkbox") //as UIImage!
let uncheckedImage = UIImage(named: "unchecked_checkbox") //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: "buttonClicked:", forControlEvents: UIControlEvents.TouchUpInside)
    self.isChecked = false
}


func buttonClicked(sender:UIButton) {
    if(sender == self){
        if isChecked == true {
            println("setting to false")
            isChecked = false
        }else{
             println("setting to true")
            isChecked = true
        }
    }
}
}

将类添加到视图控制器

override func viewDidLoad() {
    super.viewDidLoad()

    let checkBox = CheckBox()

    checkBox.backgroundColor = UIColor.blueColor()
    self.view.addSubview(checkBox)

    checkBox.setTranslatesAutoresizingMaskIntoConstraints(false)


    self.view.addConstraint(NSLayoutConstraint(item: checkBox, attribute: .Left, relatedBy: .Equal, toItem: self.view, attribute: .Left, multiplier: 1.0, constant: 50))
    self.view.addConstraint(NSLayoutConstraint(item: checkBox, attribute: .Top, relatedBy: .Equal, toItem: self.view, attribute: .Top, multiplier: 1.0, constant: 50))


}

2 个答案:

答案 0 :(得分:3)

  

复选框没有出现

这可能是因为您忘记提供checkbox任何尺寸吗?

另外,我注意到你有这些图片:

let checkedImage = UIImage(named: "checked_checkbox") //as UIImage!
let uncheckedImage = UIImage(named: "unchecked_checkbox") //as UIImage!

但是,您是否忘记将中的任何一个图像放入按钮?我没有看到任何代码那样做。

  

如果我致电checkbox.isCheck = truefalse,则会显示复选框,但如果点击则不会更改

这可能是因为你忘了给你的checkbox控制事件的任何目标行动吗?以前你有这个代码:

override func awakeFromNib() {
    self.addTarget(self, action: "buttonClicked:", forControlEvents: UIControlEvents.TouchUpInside)
    self.isChecked = false
}

但现在没有awakeFromNib调用 - 此按钮不会从笔尖唤醒。故事板是笔尖。此按钮现在来自代码。

如果你修复了这个问题,那么就会调用该代码,然后会设置isChecked并显示图片,不是吗?

答案 1 :(得分:0)

如果您决定以编程方式(swift 2.2)而不是通过故事板进行,请确保添加覆盖int 功能,必需的init?功能,并将以下内容放入覆盖初始化

override init(frame: CGRect)
{
    super.init(frame: frame)
    self.addTarget(self, action: #selector(CheckBox.ButtonClicked(_:)),      
    forControlEvents: UIControlEvents.TouchUpInside)
    self.isChecked = false
    self.setImage(uncheckedImage, forState: .Normal)

}

required init?(coder aDecoder: NSCoder)
{
    super.init(coder: aDecoder)

}

重要的一点是 self.setImage 。当View加载时,我无法显示图像。