swift 3中的多个复选框按钮

时间:2017-02-02 07:26:29

标签: swift

我在swift中有一个复选框的代码,但是我想要构建的项目大约有50个左右的复选框。为了与更少代码的目标保持一致最好我想知道是否有更好的方法来编写它而不仅仅是复制和粘贴。我尝试将多个按钮链接到一个iboutlet,但我想这不是一种方法,可以看到一个不同的按钮将如何选择,然后选择一个按钮。

工作代码:

   @IBOutlet weak var buttonOne: UIButton!

var isButtonClicked: Bool!

override func viewDidLoad() {
    super.viewDidLoad()
    isButtonClicked = false
}

@IBAction func buttonClicked(_ sender: UIButton) {

    if isButtonClicked == true {
        isButtonClicked = false
    }
    else {
        isButtonClicked = true
    }

    if isButtonClicked == true {
        buttonOne.setImage(#imageLiteral(resourceName: "ButtonClicked"), for: .normal)
    }
    else {
        buttonOne.setImage(#imageLiteral(resourceName: "ButtonUnclicked"), for: .normal)
    }
}

1 个答案:

答案 0 :(得分:0)

我建议你为复选框创建一个类。例如:

class CheckBox: UIButton {
    var checked = false {
        didSet {
            if checked == true {
                self.setImage(#imageLiteral(resourceName: "ButtonClicked"), for: .normal)
            }
            else {
                self.setImage(#imageLiteral(resourceName: "ButtonUnclicked"), for: .normal)
            }
        }
    }

    override init(frame: CGRect) {
        super.init(frame: frame)
        self.addTarget(self, action: #selector(tapped), for: .touchUpInside)
    }

    required init?(coder aDecoder: NSCoder) {
        fatalError("init(coder:) has not been implemented")
    }

    func tapped() {
        self.checked = !self.checked
        if checked == true {
            self.setImage(#imageLiteral(resourceName: "ButtonClicked"), for: .normal)
        }
        else {
            self.setImage(#imageLiteral(resourceName: "ButtonUnclicked"), for: .normal)
        }
    }
}

然后,您可以使用此类以编程方式使用for循环创建复选框。例如:

for i in 0..<50 {
    let checkbox = CheckBox(frame: CGRect(x: 0, y: i * 40, width: 40, height: 40))
    checkbox.tag = 1
    self.someView.addSubview(checkbox)
}