ios 触摸后保持 UIButton 被选中/突出显示

声明:本页面是StackOverFlow热门问题的中英对照翻译,遵循CC BY-SA 4.0协议,如果您需要使用它,必须同样遵循CC BY-SA许可,注明原文地址和作者信息,同时你必须将它归于原作者(不是我):StackOverFlow 原文地址: http://stackoverflow.com/questions/24844865/
Warning: these are provided under cc-by-sa 4.0 license. You are free to use/share it, But you must attribute it to the original authors (not me): StackOverFlow

提示:将鼠标放在中文语句上可以显示对应的英文。显示中英文
时间:2020-08-31 01:28:09  来源:igfitidea点击:

Keep UIButton Selected/Highlighted after touch

iosuibuttonswift

提问by dcbenji

I'd like my button to remain highlighted after the user taps it. If the user taps the button again I'd like it to become de-selected/unhighlighted. I'm not sure how to go about doing this in swift. I'm currently setting the button highlight image and selected image to the same .png using interface builder.

我希望我的按钮在用户点击后保持突出显示。如果用户再次点击按钮,我希望它取消选择/不突出显示。我不确定如何快速执行此操作。我目前正在使用界面构建器将按钮高亮图像和选定图像设置为相同的 .png。

When I run the app and tap the button, it changes to my highlight image for as long as my finger remains on the button.

当我运行应用程序并点击按钮时,只要我的手指停留在按钮上,它就会变成我的高亮图像。

回答by codester

Use below code declare isHighLightedas instance variable

使用以下代码声明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
        }
     });
}

I would recomend to use selectedstate instead of highlightedthe below code demonstarate with selected state

我建议使用selectedstate 而不是highlighted下面的代码 demostarate with selected state

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

回答by nenad

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

回答by Bas

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

回答by alisha chaudhary

this one worked fine for me!

这个对我来说很好用!

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

    }
}

回答by Joshua Hart

Swift 5:

斯威夫特 5:

@IBAction func toggleButton(_ sender: UIButton) {
    sender.isSelected = !sender.isSelected
}