按下UIButton图像变灰

时间:2014-09-02 21:01:11

标签: ios objective-c uibutton

我已经完成了有关按钮颜色变化的所有其他问题。这是情况,我有一个按钮,按下时会导致视图滑出。在按下按钮的图像为白色之前,一旦按下变为灰色(这是可接受的),但再次按下该按钮返回原始位置时,图像仍为灰色。我希望它回到白色,并尝试使用UIControlStateNormal,禁用等,但没有成功。

[self.button setImage:[UIImage imageNamed:@"someImage"] forState:UIControlStateNormal];

这已经改为所有UIControl类型。目前设置为:

[self.menu setImage:[UIImage imageNamed:@"menu"] forState:UIControlStateNormal];
[self.menu setImage:[UIImage imageNamed:@"menu"] forState:UIControlStateSelected | UIControlStateHighlighted];

仍然没有运气。有什么建议吗?

5 个答案:

答案 0 :(得分:1)

您显示的代码只是根据不同的状态声明按钮的图像,但是您需要物理地更改按钮的状态,以便这些图像可以用于每个状态。

我的意思是,如果按钮在选择按钮时显示不同的图像,则需要将按钮状态更改为选中状态。要将图像返回到原始未选定图像,您需要将状态更改回未选定状态。例如,假设在viewDidLoad方法中,您有以下代码来声明每个按钮状态的图像:

//Set for normal state
[self.button setImage:[UIImage imageNamed:@"normalImage.png"] forState:UIControlStateNormal];

//Set for selected state
[self.button setImage:[UIImage imageNamed:@"selctedImage.png"] forState:UIControlStateSelected];

现在,在您的IBAction方法中,您可以在状态之间切换

-(IBAction*)yourButtonIsPressed:(id)sender{

      if (!self.button.selected){ //This is checking button state

       //The code will run in here if the button is in a normal, unselected state. This is where you have you method here to slide in view etc

       //Now change the button to a selected state
       self.button.selected = YES;

      }else{
       //The code will now run in here if the button is already in a selected state and this is where you place your method to return the view etc

       //Now set the button back to an unselected state
       self.button.selected = NO;
      }
}

我希望这会有所帮助

答案 1 :(得分:1)

您必须为按钮的两种状态设置相同的图像:-

self.button.setImage(ImageName, for: .normal)
self.button.setImage(ImageName, for: .highlighted)

答案 2 :(得分:0)

这是完全被忽视的事情。我有视图不透明度设置。这样:

self.layer.opacity = .60;

是个问题。一旦我评论出该线,该按钮就像一个魅力。谢谢Jim的帮助。

答案 3 :(得分:0)

您可以通过设置属性来禁用按钮子视图的颜色调整

myButton.adjustsImageWhenHighlighted = false

答案 4 :(得分:0)

如果您以编程方式创建了按钮,请确保设置类型并更改图像渲染模式以使用原始图像来保持图像颜色。

let image = UIImage(named: "someImage").withRenderingMode(.alwaysOrigianl)
let button = UIButton(type: .system)