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

问题描述:

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

enter image description here

我可以使用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)) 


} 
+1

您可以在您的代码中使用您的Checkbox类代替UIButton –

+0

@TienDinh谢谢!我的问题必须是我的课程,或者我将Checkbox类添加到视图控制器的方式。我更新了问题以包含viewDidLoad和class。我错过了关于如何添加UIButton以编程方式与故事板的区别? – Oakland510

+0

“我的问题必须是我的课程,或者是我将Checkbox类添加到视图控制器的方式”但是@Oracleland510,你没有解释你的问题_is_!复选框没有出现在界面中?发生或未能发生的事情是有问题的? – matt

复选框不会出现

莫非是因为你已经忘了给你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并显示图像,不是吗?

+0

“故事板是笔尖”会解释很多。设置大小似乎没有帮助。如果我设置了大小和背景颜色,我只需点击一个按钮即可显示没有复选框图像的颜色和大小。有更好的功能,我可以将awakeFromNib的内容移动到?我假设我可以将它移动到viewDidLoad,但宁可保留在类本身。 – Oakland510

+1

你在说'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加载时,我无法看到图像。