Jason
Jason

Reputation: 1067

Multiple UIButtons only one can be selected - subclass in swift

I have written a subclass that selects and deselects buttons. I have put this subclass on around 5 buttons in a View Controller.

I want to amend the code so that if the user selects one and then selects another the first one gets deselected.

I was thinking of using the .tag on the button to count which buttons has been selected and remove the selection when the next button is pressed.

Here is the code :

thanks

class ChangeColour: UIButton {

    var buttontagpressed: Int = 0
    var isChecked:Bool = false{
        didSet{
            if isChecked == true {

                self.backgroundColor = UIColor(red:0.27, green:0.29, blue:0.31, alpha:1.0)
                self.setTitleColor(UIColor.whiteColor(), forState: .Normal)
                buttontagpressed = self.tag
            }

            else

            {
                self.backgroundColor = UIColor(red:0.09, green:0.83, blue:0.56, alpha:1.0)
                self.setTitleColor(UIColor(red:0.24, green:0.24, blue:0.24, alpha:1.0), forState: .Normal)

            }
        }
    }

    override func awakeFromNib() {
        self.addTarget(self, action: "buttonselected:", forControlEvents: UIControlEvents.TouchUpInside)
        self.isChecked = false
    }

    func buttonselected (sender:UIButton) {
        buttontagpressed = self.tag
        if (sender == self)
        {

            if isChecked == true
            {

                isChecked = false
            }

            else

            {

                isChecked = true

            }
        }
    }

}

Upvotes: 2

Views: 1107

Answers (1)

Woodstock
Woodstock

Reputation: 22966

Rather than using tag (which I think is quite an ugly solution) I would be inclined to add a property to your class which keeps a reference of the previously selected button. This solution would be much more elegant - Or you could use UINotificationCenter to broadcast a message to all buttons to initiate the deselect.

Upvotes: 2

Related Questions