0

The title says it all. Here is my code:

func createCheckBoxButton(xPos: CGFloat, yPos: CGFloat, tag: Int) -> UIButton {
    var checkBox = UIButton(frame: CGRect(x: xPos, y: yPos, width: checkBoxSize, height: checkBoxSize))
    checkBox.setBackgroundImage(UIImage(named: "checkbox_inactive"), forState: UIControlState.Normal)
    checkBox.setBackgroundImage(UIImage(named: "checkbox_pressed"), forState: UIControlState.Highlighted)
    checkBox.setBackgroundImage(UIImage(named: "checkbox_active"), forState: UIControlState.Selected)
    checkBox.tag = tag
    checkBox.contentMode = .ScaleAspectFit
    checkBox.addTarget(self, action: "processButton:", forControlEvents: UIControlEvents.TouchUpInside)
    return checkBox
}

And there is the called function when my button is pressed:

func processButton(sender: UIButton) {
    if (answerViewArray[sender.tag].backgroundColor == UIColor.whiteColor()) {
        answerViewArray[sender.tag].backgroundColor = myColor.pinky()
    } else {
        answerViewArray[sender.tag].backgroundColor = UIColor.whiteColor()
    }
    let tag = answerButtonsArray[sender.tag]
    answer.buttonPressed(tag)
}

When I launch the app, the checkbox_inactive image is there. When I press and keep it pressed, the checkbox_pressed image appears. But when I release my click the checkbox_inactive appears again instead of checkbox_active.

I also tried with an UIImageView, which would be the best solution for me actually. I set my checkbox as an UIImageView and at the top of my general view I put an invisible view so I can click everywhere. But when I press my invisible view, the UIImageView simply disappears.

Here is the code:

func createCheckBoxButton(xPos: CGFloat, yPos: CGFloat) -> UIImageView {
    var checkBox = UIImageView(frame: CGRect(x: xPos, y: yPos, width: checkBoxSize, height: checkBoxSize))
    checkBox.image = UIImage(named: "checkbox_inactive")
    checkBox.contentMode = .ScaleAspectFit
    return checkBox
}

Here is the function called:

func processButton(sender: UIButton) {
    if (answerViewArray[sender.tag].backgroundColor == UIColor.whiteColor()) {
        answerViewArray[sender.tag].backgroundColor = myColor.pinky()
        checkBoxArray[sender.tag].image = UIImage(named: "checkbox-active")
    } else {
        answerViewArray[sender.tag].backgroundColor = UIColor.whiteColor()
        checkBoxArray[sender.tag].image = UIImage(named: "checkbox-inactive")
    }

    let tag = answerButtonsArray[sender.tag]

    answer.buttonPressed(tag)
}
magohamote
  • 1,484
  • 1
  • 17
  • 29

1 Answers1

1

To make appear checkbox_active when you release your button you should make selected=true for the pressed button.

So your function should be like:

func processButton(sender: UIButton) {
  // If button not selected
  if(sender.selected==false){
    sender.selected = true;
  }
  else{ // If button already selected
    sender.selected = false;
  }

  // Do your other stuff
}
Yuvrajsinh
  • 4,536
  • 1
  • 18
  • 32
  • Please, pardon my ignorance, I'm pretty new in swift :D – magohamote Nov 25 '14 at 11:04
  • @Magohamoth I can't say anything for sure for your second issue as your code does't full fill all requirement to debug, but if you wan't to create checkbox like view then UIButton is best way. – Yuvrajsinh Nov 25 '14 at 11:12