it-roy-ru.com

Сохранить UIButton выбранным/выделенным после касания

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

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

12
dcbenji

Используйте код ниже объявить 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;
}
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

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

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