web-dev-qa-db-ja.com

UIButtonはグレー表示されません

Enabled = NOの場合、UIButtonは灰色がかった/灰色になるはずではありませんか?

黒の背景にシンプルなUIButtonがあります(カスタム画像もカスタムもありません。IBでドラッグしてサイズとタイトルを変更しただけです)。

そして、プログラムで無効にするように設定すると、地獄のように白いままになります!

今のところ、私は小さな愚かな回避策を使用しています:ボタンを無効にする必要があるときにhidden = NOになるボタンの上にhiddenblackbg 0,5 alpha UIView ...しかし、ボタンを適切に設定したい...

何かご意見は?

34
xfze

UIButtonを「グレイアー」にする方法はありません。しかし、あなたはそのトリックを使うことができます:

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

したがって、UIButtonは使用できないように見えます;)

42
Pierre Espenan

ボタン全体をアルファ化する必要がない別の方法があります。

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

次に、enabledプロパティをNOに設定すると、ボタンのテキストが自動的にグレー表示されます。

49
jowie

次のような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];

それは私が望む普遍的な解決策です...

1

私はこの質問に遭遇し、AppleはiOS 7でボタンを操作するための新しい IKitユーザーインターフェイスカタログ を公開しました。

あなたの質問に答えて、 IButton Class はadjustsImageWhenDisabledというプロパティを公開するようになりました。これは「ボタンが無効になっているときに画像が変わるかどうかを決定するブール値」です。

このadjustsImageWhenDisabledプロパティが「YES」に設定されている場合、ボタンが無効になっていると画像が暗く描画されます。デフォルト値はYESです。

1
user2728981

背景色を設定したので、同じ問題に直面します。

背景色を削除して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;

色を背景として設定します。これで、有効/無効にすると、灰色の効果が表示されます。

0
Abdullah Umer