ansariha
ansariha

Reputation: 61

How do I disable all buttons when one gets pressed in XCode?

How do I make it so that when I press one button in XCode, the rest of the buttons (including the one that was pressed) become disabled? Of course I still want the function to be carried out by the button that gets pressed. I just don't want the users to be able to press any button more than once, nor do I want them to be able to press another button after they've already pressed a first one. Below are my IBActions for my two buttons in this case:

@IBAction func addVote1(sender: AnyObject) {

    var query = PFQuery(className: "VoteCount")
    query.getObjectInBackgroundWithId("BiEM17uUYT") {
        (voteCount1: PFObject!, error: NSError!) ->Void in
        if error != nil {
            NSLog("%@", error)
        } else {
            voteCount1.incrementKey("votes")
            voteCount1.saveInBackgroundWithTarget(nil, selector: nil)
        }

        let votes = voteCount1["votes"] as Int
        let votes2 = voteCount1["votes2"] as Int
        self.pollResults1.text = "\(votes) votes                 \(votes2) votes"
        }
    }

@IBAction func addVote2(sender: AnyObject) {

    var query = PFQuery(className: "VoteCount")
    query.getObjectInBackgroundWithId("BiEM17uUYT") {
        (voteCount1: PFObject!, error: NSError!) -> Void in
        if error != nil {
            NSLog("%@", error)
        } else {
            voteCount1.incrementKey("votes2")
            voteCount1.saveInBackgroundWithTarget(nil, selector: nil)
        }

        let votes = voteCount1["votes"] as Int
        let votes2 = voteCount1["votes2"] as Int
        self.pollResults2.text = "\(votes) votes                 \(votes2) votes"
        }
    }
}

Upvotes: 4

Views: 6021

Answers (5)

José Neto
José Neto

Reputation: 540

You can loop through all subview in UIView and find if is a UIButton, if is you can disable the button.

func disableButtons() {
        for views in view.subviews {
            if let button = views as? UIButton {
                button.enabled = false
            }
        }
    }

Upvotes: 2

Rinju  Jain
Rinju Jain

Reputation: 1694

let subviews : NSArray = headerView.subviews as NSArray
    for button in subviews {

      if let button = button as? UIButton {
            //let btn = button as! UIButton
            button.isSelected = false
        }

    }

    sender.isSelected = true

Upvotes: 0

Markus
Markus

Reputation: 598

The easiest way is to add a UIView with a background color of UIColor.clearColor() on top. It's invisible and captures all taps.

class ViewController {
  private var uiBlocker = UIView()

  override func viewDidLoad() {
     uiBlocker.backgroundColor = UIColor.clearColor()
  }

  @IBAction func buttonAction() {
    view.addSubView(uiBlocker)

    [stuff you want to do]

    uiBlocker.removeFromSuperView()
  }
}

Upvotes: 1

Indrajeet
Indrajeet

Reputation: 5666

Do one thing, give unique Tag to all buttons. After that create the method which creates button and disable them by using button tags

func disableButton()
{
    for tagvalue in 101...102
    {
        var btnTemp = self.view.viewWithTag(tagvalue) as UIButton;
        btnTemp.enabled = false;
    }
}

Add above method in your button, as shown in below code

@IBAction func addVote1(sender: AnyObject) 
{
  //Your code
  disableButton()
}

@IBAction func addVote2(sender: AnyObject) 
{
  //Your code
  disableButton()
}

Upvotes: 1

Nate Cook
Nate Cook

Reputation: 93276

Set up @IBOutlet properties for the buttons if you haven't already, then add a lazy var array of the buttons. In the button handler, set each button's enabled property to false.

class ViewController {
    @IBOutlet var button1: UIButton!
    @IBOutlet var button2: UIButton!

    lazy var buttons: [UIButton] = [self.button1, self.button2]

    // ...

    @IBAction func addVote1(sender: AnyObject) {
        for button in self.buttons {
            button.enabled = false
        }
        // ...
    }
}

Upvotes: 8

Related Questions