使用图像作为UIButtons背景以编程方式创建复选框

时间:2018-01-22 19:50:23

标签: swift xcode

我已经看到了关于如何通过单击时更改背景图像来实现复选框的多个问题,但我不明白为什么复选框仅在我将其添加到ViewController setupViews时显示。

当我在actionButton函数中拥有所有功能时,它不会显示或更改。我应该使用协议和委托设置让我的按钮在点击时显示变化吗?以下是我的代码,我希望有人可以解释一下我在这里缺少什么?

class MainMenuViewController: UIViewController {

let clickingCheckbox = ClickingCheckbox()
var checkbox = UIImage(named: "Checked_Checkbox")
var empty_checkbox = UIImage(named:"Empty_Checkbox")   
var isBoxClicked: Bool!

 override func viewDidLoad() {
    super.viewDidLoad()
    setupViews()
}

func setupViews() {

    self.backgroundImage.addSubview(contentView)
    self.contentView.addSubview(clickingCheckbox)

    clickingCheckbox.snp.makeConstraints { (make) in
        make.top.equalTo(signInButton.snp.bottom).offset(-MainMenuViewController.padding)
        make.leading.equalTo(buttonView)
        make.width.equalTo(signInButton).multipliedBy(0.2)
        make.height.equalTo(clickingCheckbox.snp.width)
    }

    clickingCheckbox.addTarget(self, action: #selector(buttonAction(_:)), for: .touchUpInside)

    clickingCheckbox.setImage(empty_checkbox, for: UIControlState.normal) #The checkbox only shows on screen if I put it here, however it does nothing when clicked!

}

@objc  func buttonAction(_ sender: ClickingCheckbox) {

    if isBoxClicked == true {

    isBoxClicked = false

    }else{

     isBoxClicked = true
    }

     if isBoxClicked == true {

      sender.setImage(checkbox, for: UIControlState.selected)

    }else{

      sender.setImage(empty_checkbox, for: UIControlState.normal)
    }
    print("test")
}

在我的课上我有.....

class ClickingCheckbox: UIButton {

  override func draw(_ rect: CGRect) {
      super.draw(rect)

  }
}

我已经尝试在课堂上保留buttonAction功能,但这并不起作用,我尝试了多种不同的方法,但无法理解如何显示它的工作原理。所有其他建议都是使用IBOutlets实现的,所以这对我来说真的很有帮助。感谢

1 个答案:

答案 0 :(得分:0)

尝试这样的事情:

class ClickingCheckbox: UIButton {
    convenience init() {
        self.init(frame: .zero)
        self.setImage(UIImage(named: "Empty_Checkbox"), for: .normal)
        self.setImage(UIImage(named: "Checked_Checkbox"), for: .selected)
        self.addTarget(self, action: #selector(buttonTapped), for: .touchUpInside)
    }

    @objc private func buttonTapped() {
        self.isSelected = !self.isSelected
    }
}