160

我为按钮的状态正常、突出显示和选择设置了图像,但是当按钮处于选定状态并按下/突出显示它时,我没有看到突出显示的图像,而只是看到了灰色的图像。选择按钮时是否可以将图像设置为突出显示状态?

我的代码:

[button setImage:[UIImage imageNamed:@"normal.png"] forState:UIControlStateNormal];
[button setImage:[UIImage imageNamed:@"pressed.png"] forState:UIControlStateHighlighted];
[button setImage:[UIImage imageNamed:@"checked.png"] forState:UIControlStateSelected];

当我做:

[button setSelected:YES];

并按下按钮,“pressed.png”图像不会被选中。

4

15 回答 15

233

我找到了解决方案:需要添加添加行

[button setImage:[UIImage imageNamed:@"pressed.png"] forState:UIControlStateSelected | UIControlStateHighlighted];
于 2011-08-18T20:41:51.127 回答
125

您可以在 Interface Builder 中执行此操作。

选择UIButton您要设置的,IB然后转到attributes inspector

在屏幕截图中,我使用的是自定义按钮类型,但这没关系

自定义默认值

在此处输入图像描述

在此处输入图像描述

于 2013-05-30T16:12:11.833 回答
32

斯威夫特 3

// Default state (previously `.Normal`)
button.setImage(UIImage(named: "image1"), for: [])

// Highlighted
button.setImage(UIImage(named: "image2"), for: .highlighted)

// Selected
button.setImage(UIImage(named: "image3"), for: .selected)

// Selected + Highlighted
button.setImage(UIImage(named: "image4"), for: [.selected, .highlighted])

要设置背景图像,我们可以使用setBackgroundImage(_:for:)

斯威夫特 2.x

// Normal
button.setImage(UIImage(named: "image1"), forState: .Normal)

// Highlighted
button.setImage(UIImage(named: "image2"), forState: .Highlighted)

// Selected
button.setImage(UIImage(named: "image3"), forState: .Selected)

// Selected + Highlighted
button.setImage(UIImage(named: "image4"), forState: [.Selected, .Highlighted])
于 2015-11-20T17:19:29.780 回答
29

我认为这里的大多数海报完全没有抓住重点。我有同样的问题。最初的问题是关于选定按钮的突出显示状态(结合两种状态),它不能在 IB 中设置,并且会随着一些变暗而回退到默认状态。只有一篇文章提到的有效解决方案:

[button setImage:[UIImage imageNamed:@"pressed.png"] forState:UIControlStateSelected | UIControlStateHighlighted];
于 2013-08-08T07:55:18.550 回答
12

如果您有充分的理由这样做,这将解决问题

添加这些目标:

[button addTarget:self action:@selector(buttonTouchDown:) forControlEvents:UIControlEventTouchDown];
[button addTarget:self action:@selector(buttonTouchUp:) forControlEvents:UIControlEventTouchUpInside];


-(void)buttonTouchDown:(id)sender{
    UIButton *button=(UIButton *)sender;
    if(button.selected){
        [button setImage:[UIImage imageNamed:@"pressed.png"] forState:UIControlStateNormal];
    }
}

-(void)buttonTouchUp:(id)sender{
    UIButton *button=(UIButton *)sender;
    [button setImage:[UIImage imageNamed:@"normal.png"] forState:UIControlStateNormal];
}
于 2011-04-08T09:07:25.227 回答
7

您可以快速执行以下操作:

button.setImage(UIImage(named: "selected"), 
                forState: UIControlState.selected.union(.highlighted))
于 2015-09-16T16:57:39.853 回答
7

在 Swift 3.x 中,您可以通过以下方式在选择按钮时设置突出显示的图像:

// Normal state
button.setImage(UIImage(named: "normalImage"), for: .normal) 

// Highlighted state (before button is selected)
button.setImage(UIImage(named: "pressedImage"), for: .highlighted)

// Selected state
button.setImage(UIImage(named: "selectedImage"), for:  .selected)

// Highlighted state (after button is selected)
button.setImage(UIImage(named: "pressedAfterBeingSelectedImage"), 
                for:  UIControlState.selected.union(.highlighted))
于 2017-03-28T12:02:01.507 回答
2

如果我错了,请纠正我。通过做

   [button setSelected:YES];

您显然正在更改所选按钮的状态。所以很自然地,通过您提供的代码,图像将在您的案例中为选定的状态 check.png

于 2011-04-08T08:50:06.903 回答
2

就我而言,我必须将 UIButton.Type 从更改.custom.system

和:

button.setImage(UIImage(named: "unchecked"), for: .normal)
button.setImage(UIImage(named: "checked"), for: [.selected, .highlighted])

处理敲击时:

button.isSelected = !button.isSelected

于 2020-10-06T09:18:26.437 回答
1

斯威夫特 3+

button.setImage(UIImage(named: "selected_image"), for: [.selected, .highlighted])

或者

button.setImage(UIImage(named: "selected_image"), for: UIControlState.selected.union(.highlighted))

表示按钮当前处于selected状态,然后你触摸它,显示highlight状态。

于 2018-02-08T03:54:14.953 回答
1

如果有人想知道这在 Swift 中是如何工作的,这是我的解决方案:

button.setImage("normal.png", forState: .Normal)
button.setImage("highlighted.png", forState: .Highlighted)
button.setImage("selected.png", forState: .Selected)

var selectedHighLightedStates: UIControlState = UIControlState.Highlighted
selectedHighLightedStates = selectedHighLightedStates.union(UIControlState.Selected)
button.setImage("selectedHighlighted.png", forState: selectedHighLightedStates)
于 2015-08-24T12:24:12.007 回答
0

我有问题设置imageView.highlighted = NO; (设置YES正常工作,图像更改为突出显示的图像)。

解决方案是调用[imageView setHighlighted:NO];

一切正常。

于 2015-04-30T21:53:33.483 回答
0

如果您还需要在您点击并按住所选状态的自定义按钮时操作系统默认提供的突出显示的色调,请使用此 UIButton 子类。用 Swift 5 编写:

import Foundation
import UIKit
class HighlightOnSelectCustomButton: UIButton {
    override var isHighlighted: Bool {
        didSet {
            if (self.isSelected != isHighlighted) {
                self.isHighlighted = self.isSelected
            }
        }
    }
}
于 2019-09-18T06:54:39.777 回答
0

Xamarin C#

由于某种原因,按位或不起作用

button.SetImage(new UIImage("ImageNormal"), UIControlState.Normal);
button.SetImage(new UIImage("ImagePressed"), UIControlState.Selected | UIControlState.Highlighted | UIControlState.Focused);

以下作品

button.SetImage(new UIImage("ImageNormal"), UIControlState.Normal);
button.SetImage(new UIImage("ImagePressed"), UIControlState.Selected);
button.SetImage(new UIImage("ImagePressed"), UIControlState.Highlighted);
button.SetImage(new UIImage("ImagePressed"), UIControlState.Focused);
于 2018-12-19T10:59:36.717 回答
0

你想从哪里打电话

[button addTarget:self action:@selector(test:) forControlEvents:UIControlEventTouchUpInside];

方法:

-(void)test:(id)sender{
    UIButton *button=(UIButton *)sender;
    if (_togon){
      [button setTitleColor:UIColorFromRGB(89,89, 89) forState:UIControlStateNormal];
      _togon=NO;
    }
    else{
      [button setTitleColor:UIColorFromRGB(28, 154, 214) forState:UIControlStateNormal];
      _togon=YES;
    }
}

以上归功于豪尔赫,但我对其进行了一些改进,提供了完整的工作解决方案

于 2017-01-04T03:03:08.147 回答