UIButton:设置图像select高亮状态

我设置button的状态正常,突出显示和select的图像,但是当button处于选定状态,我按下/突出显示它,我没有看到我突出显示的图像,但只是变灰的图片。 当selectbutton时,是否可以将图像设置为突出显示的状态?

我的代码:

[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]; 

并按下button,“pressed.png”图像不会select。

我find了解决办法:需要添加附加行

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

你可以在Interface Builder中做到这一点。

select您想要在IB设置的UIButton ,然后转到attributes inspector

在屏幕截图中,我使用的是自定义buttontypes,但这并不重要。

自定义默认

在这里输入图像说明

在这里输入图像说明

我认为这里的大多数海报完全没有提到这一点。 我有同样的问题。 原来的问题是关于Selectedbutton(组合两种状态)的高亮状态,它不能在IB中设置,并回落到默认状态,并伴有一些变黑。 只有工作解决scheme作为一个职位提到

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

Swift 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:)

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

如果你有一个很好的理由这样做,这将是诀窍

添加这些目标:

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

在迅速,你可以做:

 button.setImage(UIImage(named: "selected"), forState: UIControlState.Selected.union(UIControlState.Highlighted)) 

在Swift 3.x中,当按下面的方式selectbutton时,可以设置突出显示的图像:

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

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

  [button setSelected:YES]; 

您正在清楚地改变所选button的状态。 所以自然由代码提供的图像将为你的情况checked.png选定的状态

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

 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) 

我有问题设置imageView.highlighted = NO; (设置YES正常工作,图像变为高亮显示)。

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

一切正常。

你想从哪里打电话

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

上面提到豪尔赫,但我改进了一点,给出了完整的工作解决scheme