以编程方式将类添加到Swift中的UIbutton
我是Swift的新手,很困惑如何以编程方式将自定义类添加到按钮。我创建了一个自定义类,并可以使用故事板添加它。它工作正常,但如何以编程方式完成?以编程方式将类添加到Swift中的UIbutton
我可以使用CheckBox类到位的UIButton或我仍然需要使用的UIButton并添加类?
的Class
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))
}
复选框不会出现
莫非是因为你已经忘了给你checkbox
任意尺寸?
另外,我注意到你有这些图片:
let checkedImage = UIImage(named: "checked_checkbox") //as UIImage!
let uncheckedImage = UIImage(named: "unchecked_checkbox") //as UIImage!
但是那也许是因为你已经忘记把要么这些图像的按钮?我没有看到任何代码。
如果我打电话
checkbox.isCheck = true
或false
复选框出现,但如果点击
莫非是因为你忘了给你checkbox
其控制事件的任何目标的行动不会改变?以前,您必须验证码:
override func awakeFromNib() {
self.addTarget(self, action: "buttonClicked:", forControlEvents: UIControlEvents.TouchUpInside)
self.isChecked = false
}
但现在没有awakeFromNib
呼叫 - 此按钮从笔尖不清醒。故事板是笔尖。这个按钮现在来自代码。
如果您修复该问题,以便调用该代码,那么将设置isChecked
并显示图像,不是吗?
“故事板是笔尖”会解释很多。设置大小似乎没有帮助。如果我设置了大小和背景颜色,我只需点击一个按钮即可显示没有复选框图像的颜色和大小。有更好的功能,我可以将awakeFromNib的内容移动到?我假设我可以将它移动到viewDidLoad,但宁可保留在类本身。 – Oakland510
你在说'let checkBox = CheckBox()',所以你调用了CheckBox的'init()'方法。所以这可能会成为放置该代码的地方。 – matt
如果您决定以编程方式执行(swift 2.2),而不是通过故事板,请确保您添加了一个重写int函数,一个所需的init?功能,并把你的重写以下的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加载时,我无法看到图像。
您可以在您的代码中使用您的Checkbox类代替UIButton –
@TienDinh谢谢!我的问题必须是我的课程,或者我将Checkbox类添加到视图控制器的方式。我更新了问题以包含viewDidLoad和class。我错过了关于如何添加UIButton以编程方式与故事板的区别? – Oakland510
“我的问题必须是我的课程,或者是我将Checkbox类添加到视图控制器的方式”但是@Oracleland510,你没有解释你的问题_is_!复选框没有出现在界面中?发生或未能发生的事情是有问题的? – matt