UIButton не будет седым

Разве UIButton не должен быть сероватым/серым, если включен = НЕТ?

У меня есть простой UIButton на blackbackground (никаких пользовательских изображений, никаких пользовательских ничего, просто перетащил его с IB и изменил размер и название).

И когда я устанавливаю его программно, чтобы отключиться, он остается белым, как черт!

На данный момент я использую небольшое глупое обходное решение: hidden blackbg 0,5 alpha UIView поверх кнопки, которая становится скрытой = НЕТ, когда мне нужно отключить кнопку... но я хотел бы правильно установить кнопку...

Любые мысли?

Ответ 1

Невозможно сделать UIButton "серым". Но вы можете использовать этот трюк:

UIButton *myButton;
myButton.alpha = 0.4;
myButton.enabled = NO;

Итак, ваш UIButton выглядит непригодным;)

Ответ 2

Существует другой способ, не имея альфа-кнопки целиком:

[startButton setTitleColor:[UIColor grayColor] forState:UIControlStateDisabled];

Тогда, когда вы установите для свойства enabled значение NO, текст кнопки будет автоматически серого.

Ответ 3

Я столкнулся с этим вопросом, и Apple опубликовала новый каталог пользовательского интерфейса UIKit для работы с кнопками в iOS 7.

В ответ на ваш вопрос UIButton Class теперь выставляет свойство под названием adjustsImageWhenDisabled, которое является "логическим значением, определяющим, изменяется ли изображение когда кнопка отключена."

Если для свойства adjustsImageWhenDisabled установлено значение "YES", изображение становится темнее, когда кнопка отключена. Значение по умолчанию - "YES".

Ответ 4

Просто введите категорию UIButton, как показано ниже, и импортируйте #import "UIButton+StateColors.h" в классы, в которых вы хотите их использовать.

.h

#import <UIKit/UIKit.h>

@interface UIButton (StateColors)

-(void)makeDisabled:(BOOL)flag;

@end

.m

#import "UIButton+StateColors.h"

#define ENABLED_BUTTON_ALPHA 1
#define DISABLED_BUTTON_ALPHA 0.3

@implementation UIButton (StateColors)

-(void)makeDisabled:(BOOL)flag {
    self.enabled = !flag;
    self.alpha = flag ? DISABLED_BUTTON_ALPHA : ENABLED_BUTTON_ALPHA;
}


@end

И используйте его вот так...

[self.emailBtn makeDisabled:NO];
[self.printBtn makeDisabled:YES];

Это универсальное решение, которое я надеюсь...

Ответ 5

У меня такая же проблема, потому что я установил цвет фона.

Я удалил цвет фона и установил его только для UIControlStateNormal, и появилось поведение по умолчанию для включения/выключения.

Если вы задаете цвет фона вместо изображения, попробуйте эту категорию для преобразования UIColor в UIImage:

скопирован из здесь:

+ (UIImage *)imageWithColor:(UIColor *)color
{
    CGRect rect = CGRectMake(0.0f, 0.0f, 1.0f, 1.0f);
    UIGraphicsBeginImageContext(rect.size);
    CGContextRef context = UIGraphicsGetCurrentContext();
    CGContextSetFillColorWithColor(context, [color CGColor]);
    CGContextFillRect(context, rect);

    UIImage *image = UIGraphicsGetImageFromCurrentImageContext();
    UIGraphicsEndImageContext();

    return image;
}

затем используйте это:

[self.loginButton setBackgroundImage:[UIImage imageWithColor:greenColor] forState:UIControlStateNormal];
self.loginButton.enabled = NO;

чтобы установить цвет в качестве фона. Теперь, когда вы включаете/выключаете, появляется серый эффект.