2016-01-20 84 views
1

我能够创建自定义复选框按钮类。但是,当我尝试将按钮放在我的视图中时,我没有看到图像。设置背景颜色只需返回该尺寸的正方形。这里是我的添加盒代码:如何以编程方式快速添加自定义UIButton

 let box:CheckBox = CheckBox() 
    box.frame = CGRectMake(screenSize.width/2, screenSize.height/2, 200, 200) 
    self.view.addSubview(box) 

I created the class as follows: 

class CheckBox: UIButton { 
    override init(frame: CGRect) { 
     super.init(frame: frame) 
     //other stuff 
    } 
    required init?(coder aDecoder: NSCoder) { 
     fatalError("init(coder:) has not been implemented") 
    } 
    // Images 
    let checkedImage = UIImage(named: "checked_checkbox") 
    let uncheckedImage = UIImage(named: "checkbox_unchecked_icon") 

    // 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 { 
       isChecked = false 
      } else { 
       isChecked = true 
      } 
     } 
    } 
} 
+2

你不是从XIB文件创建你的复选框实例,所以'awakeFromNib'永远不会被调用。 – Bastek

+0

@Bastek在那里awakeFromNib内的代码应该去哪里? – DMop

+0

请不要在您的问题中“修复”您的代码。如果您有答案,则需要将其**作为答案**发布,并保留完整的问题。 – meagar

回答

0

将您awakeFromNib代码到你init()awakeFromNib仅在从nib/xib文件初始化时调用。

这永远不会被调用。你可以通过设置一个断点来测试它。

这是它应该如何看:

override init(frame: CGRect) { 
    super.init(frame: frame) 
    self.addTarget(self, action: "buttonClicked:", forControlEvents: UIControlEvents.TouchUpInside) 
    self.isChecked = false 
} 

这样,self.isChecked被调用,图像设置,你会看到一个比一个灰色的框了。

+0

对不起,这是我的错。我的意思是从所有人中删除吸烟者这个词,因为这是一个盒子来检查一个人是不是吸烟者。但是,吸烟者出现在你看到的任何地方 – DMop

+1

然后,我可以看到的另一件事是,你应该将'awakeFromNib'代码移动到'init'中。这是当你使用'CheckBox()'时会被调用的东西。我会更新 –

+0

这似乎工作!谢谢!我只有一个问题。当视图最初加载时,两个图像都不显示,它只是一个带有背景颜色的框。我将如何让未经检查的盒子马上显示出来? – DMop

相关问题