使用imageView外观禁用UIButton而不将isEnabled设置为false

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了使用imageView外观禁用UIButton而不将isEnabled设置为false相关的知识,希望对你有一定的参考价值。

我通过设置button.isEnabled = false禁用了一些UIButtons。我发现在禁用按钮时我仍然需要按下按钮。所以,我需要启用按钮但是让它们看起来禁用。这应该可以通过更改按钮的图像/文本的颜色来实现。这些按钮有一个imageView,可以改变isEnabled的颜色并突出显示。如果我停止设置isEnabled,则imageView不再更改。作为一个实验,我将文本添加到button.titleLabel,我可以在按钮上看到imageView和titleLabel。我可以设置button.titleLabel.isEnabled = false并看到titleLabel变为灰色但imageView保持亮起。我没有为imageView找到等效的isEnabled。我尝试过改变imageView颜色的东西,但是UIButton似乎确定只有它才能改变图像颜色,并且只有在设置了button.isEnabled时。有没有办法以编程方式改变图像颜色?

我已经检查了所有建议的问题,但它们都设置为isEnabled。

答案

设置按钮的titleColor和titleImage为正常状态,使按钮看起来禁用但不被禁用...

'fakeIsEnabled'没有便捷的方法,所以你必须手动完成

另一答案

似乎问题是在我的xcassetts中我将“渲染为”设置为图像的默认值。如果我强迫它使用“原始图像”,我现在遇到了同样的问题。为什么设置button.isEnabled = false工作是未知的,除非苹果可能太聪明了一半。如果我将其设置为“模板图像”,我可以生效button.imageView.tintColor。通过编程方式加载图像我知道。

所以,步骤是:

  1. 确保图像在xCassetts中设置为模板。
  2. 在IB中设置初始tintColor或以编程方式设置为: button?.imageView?.tintColor = UIColor.white
  3. 然后在代码中根据布尔值更改颜色是: button?.imageView?.tintColor = value ? UIColor.white : UIColor.white.withAlphaComponent(0.5)

我还发现我可以使用tintAdjustmentMode使用代码:

`button?.imageView?.tintAdjustmentMode  = value ? .normal : .dimmed`

它会使图像变暗,可能与button.isEnabled = false一样多。我发现我更喜欢0.5的alpha,因为它更加明显。

以上是关于使用imageView外观禁用UIButton而不将isEnabled设置为false的主要内容,如果未能解决你的问题,请参考以下文章

如何删除禁用的 UIButton 的灰色外观

根据状态更改 UIButton 中 ImageView 的 tint 颜色

禁用 UIButton 而没有淡入淡出效果

从控制多个场景的视图控制器中禁用 uibutton

如何缩放 UIButton 的 imageView?

UIButton 背景 VS UIButton imageview.view