Отключенная кнопка UIB не выцветшая и не серая - PullRequest
117 голосов
/ 19 апреля 2011

В моем приложении для iPhone есть UIButton, который я создал в Interface Builder.Я могу успешно включить и отключить его в своем коде следующим образом ...

sendButton.enabled = YES;

или

sendButton.enabled = NO;

Однако внешний вид кнопки всегда одинаков!Он не выцветший и не серый.Если я попытаюсь нажать на него, он будет включен или отключен, как и ожидалось.Я что-то пропустил?Разве он не должен выглядеть блеклым или серым?

спасибо

Ответы [ 17 ]

164 голосов
/ 20 апреля 2011

Вы можете использовать следующий код:

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

or

sendButton.enabled = NO;
sendButton.alpha = 0.5;
68 голосов
/ 28 августа 2015

просто измените конфигурацию состояния, чтобы отключить и выберите то, что вы хотите, фоновое изображение для отключенного состояния

enter image description here

31 голосов
/ 27 января 2013

Другой вариант - изменить цвет текста (например, на светло-серый) для отключенного состояния. В редакторе раскадровки выберите «Отключено» во всплывающей кнопке «Конфигурация состояния» и используйте всплывающую кнопку «Цвет текста», чтобы изменить цвет текста. В коде используйте -setTitleColor: forState: message.

(я понимаю, что это более старая запись, но я подумал, что другим может понравиться эта опция)

23 голосов
/ 19 апреля 2011

Попробуйте установить разные изображения для UIControlStateDisabled (отключенное серое изображение) и UIControlStateNormal (обычное изображение), чтобы кнопка генерировала для вас отключенное состояние.

12 голосов
/ 05 октября 2013

Если вы используете текстовую кнопку, вы можете поместить в viewDidLoad метод экземпляра

- (void)setTitleColor:(UIColor *)color forState:(UIControlState)state

пример:

[self.syncImagesButton setTitleColor:[UIColor grayColor] forState:UIControlStateDisabled];
11 голосов
/ 28 февраля 2018

Чтобы кнопка была блеклой при отключении, вы можете установить альфа для нее. Для вас есть два варианта:

Первый способ : Если вы хотите подать заявку на все ваши кнопки в вашем приложении, вы можете написать extension для UIButton следующим образом:

extension UIButton {

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

}

Второй способ : Если вы просто хотите подать заявку на некоторые кнопки в своем приложении, вы можете написать собственный класс из UIButton, как показано ниже, и использовать этот класс, для которого вы хотите применить:

class MyButton: UIButton {
    override var isEnabled: Bool {
        didSet {
            alpha = isEnabled ? 1.0 : 0.5
        }
    }
}
10 голосов
/ 02 февраля 2016

Вы можете использовать adjustsImageWhenDisabled, который является свойством UIButton
(@property (nonatomic) BOOL adjustsImageWhenDisabled)

Ex:

 Button.adjustsImageWhenDisabled = false
5 голосов
/ 08 июня 2016

Это довольно старый вопрос, но есть гораздо более простой способ добиться этого.

myButton.userInteractionEnabled = false

Это отключит любые сенсорные жесты без изменения внешнего вида кнопки

4 голосов
/ 23 ноября 2014

In Swift :

previousCustomButton.enabled = false
previousCustomButton.alpha = 0.5

или

nextCustomButton.enabled = true
nextCustomButton.alpha = 1.0
3 голосов
/ 19 октября 2017

Создайте расширение в Swift> 3.0 вместо каждой кнопки отдельно

extension UIButton {
override open var isEnabled : Bool {
    willSet{
        if newValue == false {
            self.setTitleColor(UIColor.gray, for: UIControlState.disabled)
        }
     }
   }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...