How to restrict button click

2020-05-03 11:55发布

I have a VC like this

enter image description here

for the checkBoxes i have embedded UIButtons and i am changing their image on click. Here's my code

@IBOutlet weak var bestSellerButton: UIButton!
@IBOutlet weak var trendingButton: UIButton!
@IBOutlet weak var lowToHighButton: UIButton!
@IBOutlet weak var highToLowButton: UIButton!

    var isBoxClicked = Bool()

    func updateCheckImageOnClick(button: UIButton) {
    if isBoxClicked == true {
        isBoxClicked = false
        button.setImage(UIImage.init(named: "checkmark"), for: UIControlState.normal)
    }
    else {
        isBoxClicked = true
        button.setImage(UIImage(), for: UIControlState.normal)
    } 
}


 @IBAction func clickedBestSellerBtn(_ sender: Any) {
    updateCheckImageOnClick(button: bestSellerButton)
}

@IBAction func clickedTrendingBtn(_ sender: Any) {
    updateCheckImageOnClick(button: trendingButton)
}

likewise for the rest two. Now the check mark image is being set properly every time on click gets set and unset, but i want to restrict the user like if he clicks on best seller btn he's unable to choose the rest, likewise if he clicks trending he can't select any other. How would i do that?

3条回答
Lonely孤独者°
2楼-- · 2020-05-03 12:29

You could rename updateCheckImageOnClick(button: UIButton) to something generic in order to add some logic inside, like:

func update(button: UIButton) {
    isBoxClicked = !isBoxClicked

    button.setImage(isBoxClicked ? UIImage(named: "checkmark") : UIImage(), for: UIControlState.normal)

    if button == bestSellerButton {
        trendingButton.isEnabled = false
        lowToHighButton.isEnabled = false
        highToLowButton.isEnabled = false
    } else if button == trendingButton {
        bestSellerButton.isEnabled = false
        lowToHighButton.isEnabled = false
        highToLowButton.isEnabled = false
    } else if button == highToLowButton {
        trendingButton.isEnabled = false
        lowToHighButton.isEnabled = false
        bestSellerButton.isEnabled = false
    } else {
        bestSellerButton.isEnabled = false
        trendingButton.isEnabled = false
        highToLowButton.isEnabled = false
    }
}
查看更多
Evening l夕情丶
3楼-- · 2020-05-03 12:32

Make the Other button disabled in particular scenario. isUserInteractionEnabled = false

查看更多
等我变得足够好
4楼-- · 2020-05-03 12:34

Usama I've implemented a simple button action for all those buttons which may accomplish your need. Here is the step by step implementation -

First, Declare these variables -

var buttonSelected:Bool = false

var selectedButton : UIButton?

Second, Add a single @IBAction for all buttons -

Third, Here is the action method -

@IBAction func btnSelection(_ sender: UIButton) {

    if(buttonSelected){

        if(selectedButton == sender){

            buttonSelected = false

            selectedButton = nil

            sender.setImage(UIImage(), for: UIControlState.normal)

        }
        else{

            // It's not the previously selected button
            //Do your stuff
        }

    }
    else{

        buttonSelected = true

        selectedButton = sender

        sender.setImage(UIImage.init(named: "checkmark"), for: UIControlState.normal)

    }

}

Hope it will help you to start with.

查看更多
登录 后发表回答