Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/swift/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Iphone 以编程方式将类添加到Swift中的UIbutton_Iphone_Swift_Uibutton - Fatal编程技术网

Iphone 以编程方式将类添加到Swift中的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

我是Swift新手,对如何通过编程将自定义类添加到按钮感到困惑。我创建了一个自定义类,可以使用故事板添加它。它工作得很好,但是如何通过编程实现呢

我可以使用CheckBox类来代替UIButton吗?或者我仍然需要使用UIButton并添加类吗

班级

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()
,因此您调用了checkBox
init()
方法。因此,这可能是一个放置将被调用的代码的地方。