Сохранить UIButton Selected/Highlighted после нажатия

Я хочу, чтобы моя кнопка оставалась подсвеченной после того, как пользователь ее нажал. Если пользователь снова нажал кнопку, я бы хотел, чтобы он был отменен/не засвечен. Я не уверен, как это сделать быстро. В настоящее время я устанавливаю изображение кнопки с выделенным изображением и выбранным изображением на тот же .png, используя конструктор интерфейса.

Когда я запускаю приложение и нажимаю кнопку, он меняется на мое выделенное изображение до тех пор, пока мой палец остается на кнопке.

Ответ 1

Используйте ниже код  объявить isHighLighted как переменную экземпляра

//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
        }
     });
}

Я бы рекомендовал использовать selected состояние вместо highlighted приведенный ниже код с выбранным состоянием

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;
}

Ответ 2

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
    }
}

Ответ 3

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)
}

Ответ 4

этот работал нормально для меня!

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

    }
}