设置 UIButton alpha 在 iOS 7 上无法正常工作。

Posted

技术标签:

【中文标题】设置 UIButton alpha 在 iOS 7 上无法正常工作。【英文标题】:Setting a UIButton alpha is not working correctly on iOS 7. 【发布时间】:2014-03-28 02:21:51 【问题描述】:

我来回禁用和更改 UIButton 的 alpha,当调用该方法时,它启用按钮,alpha 永远不会改变。

下面的代码在包含按钮的实际 ViewController 中。但我从显示此 ViewController 的不同 ViewController 调用这些方法。

-(void)enableArrow 

    [self.LocationCirlceButton setEnabled:YES];
    [self.LocationCirlceButton setAlpha:1.0f];



-(void)disableArrow 
    [self.LocationCirlceButton setEnabled:NO];
    [self.LocationCirlceButton setAlpha:0.5f];

而且,是的,这个 UI 工作正在主线程上完成。

【问题讨论】:

按钮最初是隐藏的吗? 什么样的uibutton? 【参考方案1】:

发现了问题,但很奇怪。我将以下图像设置为禁用,但是该文件以某种方式从应用程序中删除。所以我把它改成了Checkmark_normal文件,一切正常。

 setImage:[UIImage imageNamed:@"Checkmark_disabled.png"] forState:UIControlStateDisabled];

现在:

 setImage:[UIImage imageNamed:@"Checkmark_normal.png"] forState:UIControlStateDisabled];

【讨论】:

这并不奇怪。当UIImageViewUIButtonUIImage 的任何容器找不到指定的图像时,它总是显示容器的background color。我猜你的背景颜色是[UIColor clearColor] 但它显示的是正常或选中的其他图标之一。它没有显示任何内容,而是显示正常图像或选定图像。【参考方案2】:

UIButton 设为公共属性并在that different ViewController 而不是ViewController contains the button 中创建方法怎么样?

像这样:

-(void) enableButton

    [originalController.button setAlpha:1.0f];


-(void)disableButton

    [originalController.button setAlpha:0.0f];

关键是你必须抓住那个特定的ViewController contains the button 才能使它工作(有很多方法可以做到这一点)。

【讨论】:

【参考方案3】:

有两个子视图可以控制。你可以打电话

myButton.imageView.alpha = 0.5;
myButton.titleLabel.alpha = 0.5;

或者你可以继承按钮并覆盖setEnabled:

-(void)setEnabled:(BOOL)enabled

    super.enabled = enabled;
    self.imageView.alpha = enabled ? 1 : 0.5;
    self.titleLabel.alpha = self.imageView.alpha;

【讨论】:

以上是关于设置 UIButton alpha 在 iOS 7 上无法正常工作。的主要内容,如果未能解决你的问题,请参考以下文章

如何在 UIButton 的标签子视图上设置 alpha

如何同时为 UIButton 的 titleLabel 的框架和 alpha 设置动画?

以编程方式更改UIButton的标题颜色,其标题设置为iOS 7中的属性

使用 PNG 背景为 UIButton alpha 设置动画:为啥动画从 alpha = 0 过渡到 alpha = 1 时会变成亮白色?

从另一个类修改 UIButton 的 alpha 属性

UIButton 在 iOS 7 的兼容模式下没有获得 iOS 6 样式