禁用UIButton不褪色或灰色

And*_*y A 125 iphone cocoa-touch uibutton ios

在我的iPhone应用程序中,我有一个我在Interface Builder中创建的UIButton.我可以在我的代码中成功启用和禁用它...

sendButton.enabled = YES;
Run Code Online (Sandbox Code Playgroud)

要么

sendButton.enabled = NO;
Run Code Online (Sandbox Code Playgroud)

但是,按钮的视觉外观总是一样的!它没有褪色或灰色.如果我尝试单击它,则会按预期启用或禁用它.我错过了什么吗?它不应该看起来褪色或灰色?

谢谢

Rav*_*vin 172

您可以使用以下代码:

sendButton.enabled = YES;
sendButton.alpha = 1.0;

or

sendButton.enabled = NO;
sendButton.alpha = 0.5;
Run Code Online (Sandbox Code Playgroud)

  • 虽然这有效,但我认为根据控制状态改变外观的解决方案如[this](http://stackoverflow.com/a/5715366/2547229)和[this](http://stackoverflow.com/a/14543996/ 2547229)从下面是一个更好的主意.他们使用内置机制来实现自动更改,而不是根据其状态显式更新控件的外观. (10认同)

Ahm*_* R. 72

只需将状态配置更改为禁用并选择所需内容,背景图像为禁用状态

在此输入图像描述

  • 背景颜色似乎不起作用 (22认同)
  • 这只会更改**Button**子标题中的属性.背景颜色在**View**子标题下,因此不会被状态配置更改. (9认同)
  • 这不适用于视图的背景颜色.在我的项目中,我结合了之前的答案和这个. (2认同)

guy*_*zda 32

另一个选项是更改禁用状态的文本颜色(例如浅灰色).在Storyboard编辑器中,从State Config弹出按钮中选择Disabled,然后使用Text Color弹出按钮更改文本颜色.在代码中,使用-setTitleColor:forState:消息.

(我意识到这是一篇较旧的帖子,但我认为其他人可能会喜欢这个选项)


Jha*_*iya 23

尝试为UIControlStateDisabled(禁用灰度图像)和UIControlStateNormal(正常图像)设置不同的图像,以便按钮为您生成禁用状态.

  • 他没有使用图像 - 但你可以将同样的概念应用于`[UIButton setAttributedTitle:forState:]`.创建属性字符串,其中文本前景色设置为透明色. (2认同)

Heo*_*des 14

要在禁用时使按钮褪色,您可以为其设置alpha.有两种选择:

第一种方式:如果你想申请你的应用程序中的所有按钮,那么你可以extension像这样写UIButton:

extension UIButton {

    open override var isEnabled: Bool{
        didSet {
            alpha = isEnabled ? 1.0 : 0.5
        }
    }

}
Run Code Online (Sandbox Code Playgroud)

第二种方式:如果您只是想申请应用程序中的某些按钮,那么您可以从UIButton编写自定义类,如下所示,并使用您要应用的类:

class MyButton: UIButton {
    override var isEnabled: Bool {
        didSet {
            alpha = isEnabled ? 1.0 : 0.5
        }
    }
}
Run Code Online (Sandbox Code Playgroud)


小智 13

如果使用文本按钮,则可以将viewDidLoad放入实例方法中

- (void)setTitleColor:(UIColor *)color forState:(UIControlState)state
Run Code Online (Sandbox Code Playgroud)

例:

[self.syncImagesButton setTitleColor:[UIColor grayColor] forState:UIControlStateDisabled];
Run Code Online (Sandbox Code Playgroud)


小智 11

你可以使用adjustsImageWhenDisabled哪个属性UIButton
(@property (nonatomic) BOOL adjustsImageWhenDisabled)

例如:

 Button.adjustsImageWhenDisabled = false
Run Code Online (Sandbox Code Playgroud)

  • 那是做什么的?您能解释一下他为什么要使用它吗? (2认同)

Ras*_*tif 8

斯威夫特 4+


extension UIButton {
    override open var isEnabled: Bool {
        didSet {
            if self.isEnabled {
                self.alpha = 1.0
            }
            else {
                self.alpha = 0.5
            }
            //make sure button is updated
            self.layoutIfNeeded()
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

如何使用

myButton.isEnabled = false

Run Code Online (Sandbox Code Playgroud)


Kir*_*n S 7

设置title color为不同的状态:

@IBOutlet weak var loginButton: UIButton! {
        didSet {
            loginButton.setTitleColor(UIColor.init(white: 1, alpha: 0.3), for: .disabled)
            loginButton.setTitleColor(UIColor.init(white: 1, alpha: 1), for: .normal)
        }
    }
Run Code Online (Sandbox Code Playgroud)

用法:(文字颜色会自动改变)

loginButton.isEnabled = false
Run Code Online (Sandbox Code Playgroud)

在此处输入图片说明


Die*_*con 6

这是一个相当古老的问题,但实现这一目标的方法很简单.

myButton.userInteractionEnabled = false

这将仅禁用任何触摸手势而不更改按钮的外观

  • 我认为OP有相反的问题。他们已经在更改此标志,但希望更改外观。 (2认同)

Kin*_*ard 5

斯威夫特

previousCustomButton.enabled = false
previousCustomButton.alpha = 0.5
Run Code Online (Sandbox Code Playgroud)

或者

nextCustomButton.enabled = true
nextCustomButton.alpha = 1.0
Run Code Online (Sandbox Code Playgroud)