Iphone 以编程方式将类添加到Swift中的UIbutton
我是Swift新手,对如何通过编程将自定义类添加到按钮感到困惑。我创建了一个自定义类,可以使用故事板添加它。它工作得很好,但是如何通过编程实现呢 我可以使用CheckBox类来代替UIButton吗?或者我仍然需要使用UIButton并添加类吗 班级Iphone 以编程方式将类添加到Swift中的UIbutton,iphone,swift,uibutton,Iphone,Swift,Uibutton,我是Swift新手,对如何通过编程将自定义类添加到按钮感到困惑。我创建了一个自定义类,可以使用故事板添加它。它工作得很好,但是如何通过编程实现呢 我可以使用CheckBox类来代替UIButton吗?或者我仍然需要使用UIButton并添加类吗 班级 class CheckBox: UIButton { //images let checkedImage = UIImage(named: "checked_checkbox") //as UIImage! let uncheckedImage
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))
}
该复选框不会出现
这可能是因为您忘记了给您的复选框指定任何大小吗
此外,我注意到您有以下图像:
let checkedImage = UIImage(named: "checked_checkbox") //as UIImage!
let uncheckedImage = UIImage(named: "unchecked_checkbox") //as UIImage!
但可能是因为你忘了把这些图片中的任何一个放在按钮上?我没有看到任何代码能做到这一点
如果我调用checkbox.isCheck=true
或false
则复选框会出现,但单击后不会更改
这可能是因为您忘记了为其控制事件提供任何目标操作?以前您有以下代码:
override func awakeFromNib() {
self.addTarget(self, action: "buttonClicked:", forControlEvents: UIControlEvents.TouchUpInside)
self.isChecked = false
}
但是现在没有了awakeFromNib
call-此按钮不会从nib唤醒。故事板是笔尖。这个按钮现在来自代码
如果您修复了该问题,以便调用该代码,那么将设置isChecked
,并显示图像,不是吗?如果您决定以编程方式(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。加载视图时,我无法使图像显示。您可以使用您的Checkbox类来代替视图中的UIButtoncode@TienDinh谢谢我的问题必须与我的类有关,或者与我将Checkbox类添加到视图控制器的方式有关。我更新了问题,将viewDidLoad和类包括在内。我是否遗漏了一些关于如何以编程方式添加UIButton与在故事板中添加UIButton的区别?“我的问题一定是我的类,或者我将Checkbox类添加到视图控制器的方式”但是@Oakland510,您没有解释您的问题是什么!该复选框是否未显示在界面中?发生了什么或没有发生什么是有问题的?@matt复选框没有出现。如果我调用checkbox.isCheck=true或false,则会显示复选框,但单击后不会更改。如果我通过故事板添加按钮,并将自定义类设置为复选框,则复选框会在单击时出现并更改。@matt即使使用CheckBox.frame=CGRectMake(30,30,100,100),我仍然一无所获。如果我设置checkBox.backgroundColor=UIColor.blueColor(),我至少可以得到一个大小合适的蓝色框。然而,这仍然不是我期望的复选框。“故事板就是笔尖”将解释很多。设置大小似乎没有帮助。如果我设置了大小和背景色,我只会得到一个按钮的颜色和大小预期没有复选框图像。是否有更好的函数可以将awakeFromNib的内容移动到?我假设我可以将其移动到viewDidLoad,但更愿意将其保留在类本身中。您说的是let checkBox=checkBox()
,因此您调用了checkBoxinit()
方法。因此,这可能是一个放置将被调用的代码的地方。