UIButton:为选定突出显示的状态设置图像

use*_*681 155 iphone cocoa-touch image selected uibutton

我为按钮的状态Normal,Highlighted和Selected设置了一个图像,但是当按钮处于选中状态时我按下/突出显示它我没有看到我突出显示的图像而只是灰色的图像.选择按钮时,是否可以将图像设置为高亮显示状态?

我的代码:

[button setImage:[UIImage imageNamed:@"normal.png"] forState:UIControlStateNormal];
[button setImage:[UIImage imageNamed:@"pressed.png"] forState:UIControlStateHighlighted];
[button setImage:[UIImage imageNamed:@"checked.png"] forState:UIControlStateSelected];
Run Code Online (Sandbox Code Playgroud)

当我做:

[button setSelected:YES];
Run Code Online (Sandbox Code Playgroud)

并按下按钮,"pressed.png"图像不会选择.

use*_*681 230

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

[button setImage:[UIImage imageNamed:@"pressed.png"] forState:UIControlStateSelected | UIControlStateHighlighted];
Run Code Online (Sandbox Code Playgroud)

  • @stephen:为"StateConfig"(默认/突出显示/选择/禁用)属性的不同条件设置UIButton的"背景"(图像)属性适用于我. (6认同)
  • 有什么方法可以通过界面构建​​器来完成吗 (5认同)
  • 你**可以**在IB中这样做.看下面的答案截图! (4认同)
  • 由于你不能在IB中设置它,你可以将它放在你的viewDidLoad方法中,它几乎一样好,因为你可以在IB中更改图像而不必担心总是更新代码以匹配.[button setImage:[button imageForState:UIControlStateHighlighted] forState:UIControlStateSelected | UIControlStateHighlighted]; (3认同)
  • Ajeet的解决方案对我不起作用.我也想知道在IB上这样做的方法 (2认同)

Río*_*ire 115

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

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

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

自定义默认

在此输入图像描述

在此输入图像描述

  • 不在问题的背景下. (9认同)
  • 这不回答这个问题.他说突出显示+选定状态的组合 (5认同)
  • 定制或系统实际上很重要.两个人都玩,你会看到. (4认同)

kvo*_*the 28

斯威夫特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])
Run Code Online (Sandbox Code Playgroud)

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

Swift 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])
Run Code Online (Sandbox Code Playgroud)


小智 27

我想这里的大多数海报完全忽略了这一点.我有同样的问题.最初的问题是关于选中按钮(组合两个状态)的突出显示状态,它无法在IB中设置并且在一些变暗的情况下回落到默认状态.只提到工作解决方案作为一个帖子:

[button setImage:[UIImage imageNamed:@"pressed.png"] forState:UIControlStateSelected | UIControlStateHighlighted];
Run Code Online (Sandbox Code Playgroud)


Jor*_*rge 11

如果你有充分的理由这样做,这将成功

添加这些目标:

[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];
}
Run Code Online (Sandbox Code Playgroud)


Rol*_*som 7

在swift中你可以这样做:

button.setImage(UIImage(named: "selected"), 
                forState: UIControlState.selected.union(.highlighted))
Run Code Online (Sandbox Code Playgroud)


Ash*_*rma 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))
Run Code Online (Sandbox Code Playgroud)