web-dev-qa-db-fra.com

Conserver UIButton sélectionné/mis en surbrillance après le toucher

J'aimerais que mon bouton reste en surbrillance après que l'utilisateur l'ait tapé. Si l'utilisateur appuie à nouveau sur le bouton, j'aimerais qu'il soit désélectionné/mis en surbrillance. Je ne suis pas sûr de savoir comment s'y prendre à Swift. Je suis en train de définir le bouton surligner l'image et l'image sélectionnée sur le même fichier .png à l'aide du générateur d'interface.

Lorsque je lance l'application et que je touche le bouton, mon image de surbrillance change tant que mon doigt reste sur le bouton.

12
dcbenji

Utilisez le code ci-dessous déclarer isHighLighted comme variable d'instance

//write this in your class
 var isHighLighted:Bool = false


override func viewDidLoad() {

    let button  = UIButton(type: .system)

    button.setTitle("Your title", forState: UIControlState.Normal)
    button.frame = CGRectMake(0, 0, 100, 44)

    self.view.addSubview(button as UIView)

    button.addTarget(self, action: "buttonClicked:", forControlEvents: UIControlEvents.TouchUpInside)

}

func buttonClicked(sender:UIButton)
{
    dispatch_async(dispatch_get_main_queue(), {

        if isHighLighted == false{
            sender.highlighted = true;
            isHighLighted = true
        }else{
            sender.highlighted = false;
            isHighLighted = false
        }
     });
}

Je recommanderais d'utiliser selected state au lieu de highlighted le code démonstarate ci-dessous avec l'état sélectionné

override func viewDidLoad() {

    let button  = UIButton(type: .system)

    button.setTitle("Your title", forState: UIControlState.Normal)
    button.frame = CGRectMake(0, 0, 100, 44)

    self.view.addSubview(button as UIView)
    //set normal image 
    button.setImage(normalImage, forState: UIControlState.Normal)
    //set highlighted image 
    button.setImage(selectedImage, forState: UIControlState.Selected)

    button.addTarget(self, action: "buttonClicked:", forControlEvents: UIControlEvents.TouchUpInside)

}

func buttonClicked(sender:UIButton)
{
      sender.selected = !sender.selected;
}
31
codester
func buttonPressed(_ sender: UIButton) {

    // "button" is a property

    if button.isSelected {
        button.setImage(UIImage(named: "filled-heart"), for: .normal)
        button.isSelected = false
    }else {
        button.setImage(UIImage(named: "empty-heart"), for: .selected)
        button.isSelected = true
    }
}
4
nenad
func highlightButton(button: UIButton) {
       button.highlighted = true
}

@IBAction func touched(sender: UIButton) {
    let timer = NSTimer.scheduledTimerWithTimeInterval(0.0, target: self, selector: Selector("highlightButton(sender)"), userInfo: nil, repeats: true)
}
3
Bas

celui-ci a bien fonctionné pour moi!

func buttonColorChanger(sender :  UIButton )  {

    if button.isSelected == false
    {

        button.backgroundColor = UIColor.purple
        print("selected")

        button.setTitle("selected", for: .normal)
        button.setTitleColor(UIColor.white, for: .normal)
         button.isSelected = true
    }else{

        button.backgroundColor = UIColor.white
        print("unselected")
        button.isSelected = false

    }
}
0
alisha chaudhary