如何以编程方式快速添加自定义 UIButton
Posted
技术标签:
【中文标题】如何以编程方式快速添加自定义 UIButton【英文标题】:How to add custom UIButton programmatically swift 【发布时间】:2016-01-20 20:58:20 【问题描述】:我能够创建一个自定义复选框按钮类。但是,当我尝试将按钮放在我的视图中时,我没有得到图像。设置背景颜色只是返回该大小的正方形。这是我添加框的代码:
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
【问题讨论】:
你不是从 XIB 文件创建你的复选框实例,所以awakeFromNib
永远不会被调用。
@Bastek awakeFromNib 中的代码应该去哪里?
请不要在您的问题中“修复”您的代码。如果您有答案,您需要将其发布为作为答案,并保留您的问题。
【参考方案1】:
将您的 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
被调用,图像被设置,你会看到更多的灰色框。
【讨论】:
对不起,这是我的错。我的意思是从所有人中删除“吸烟者”这个词,因为它是一个检查一个人是否吸烟的盒子。但吸烟者随处可见 那么我可以看到的另一件事是您应该将您的awakeFromNib
代码移动到init
。这就是您使用CheckBox()
时所调用的内容。我会更新
这似乎行得通!谢谢!我只有一个问题。当视图最初加载时,没有图像显示,它只是一个带有我设置的背景颜色的框。如何让未选中的框立即显示?以上是关于如何以编程方式快速添加自定义 UIButton的主要内容,如果未能解决你的问题,请参考以下文章
以编程方式将 UIButton 添加到带有情节提要的自定义 ViewController
如何在标准 UITableViewCell 中以编程方式自动布局右侧的自定义 UIButton。