Popolok11
Popolok11

Reputation: 57

Change Color of Programmatically Created Button when Pressed

I'm using a function to create multiple buttons for my game.

func createButton() {
    let button = UIButton()
    button.setTitle("", for: .normal)
    button.frame = CGRect(x:15, y: 50, width: 200, height:100)
    button.backgroundColor = UIColor.red
    self.view.addSubview(button)
    button.addTarget(self, action: Selector(("buttonPressed:")), for: 
    .touchUpInside)
}

I call this function once for testing in viewDidLoad function, but I don't know what code I should put into my buttonPressed() function for the color of my button to change? I tried doing

self.backgroundColor = UIColor.blue

but that didn't work. I also tried using UIButton and button instead of self, but both of those didn't work either. What should I do?

Upvotes: 0

Views: 1198

Answers (2)

user7014451
user7014451

Reputation:

Your code isn't clean Swift 4 code. Here's how to do this:

  • Create your button like you are, but change Selector to #selector:

    func createButton() {
        let button = UIButton()
        button.setTitle("", for: .normal)
        button.frame = CGRect(x:15, y: 50, width: 200, height:100)
        button.backgroundColor = UIColor.red
        self.view.addSubview(button)
        button.addTarget(self, action: #selector((buttonPressed)), for: .touchUpInside)
    }
    
  • Use the sender that is automatically added:

    @objc func buttonPressed(sender: UIButton) {
        sender.backgroundColor = UIColor.blue
    }
    

Additionally may I offer a few suggestions?

  • Check the background color before changing it. No sense in needlessly changing a button that is already blue.
  • Since you aren't setting the title to your button, set the tag property (you can even add this as a parameter to createButton). This way you can know which button was tapped.

Upvotes: 2

slushy
slushy

Reputation: 12385

Just make the button an instance property.

let changingButton = UIButton()

func createButton() {
    changingButton.backgroundColor = UIColor.red
    changingButton.addTarget(self, action: #selector(buttonPressed), for: .touchUpInside)
}

@objc func buttonPressed() {
    changingButton.backgroundColor = UIColor.blue
}

Upvotes: 0

Related Questions