web-dev-qa-db-ja.com

iOS 7を強調表示するときにUIButtonのタイトルの色を設定します

ViewControllerに次のコードがあり、すべてのアウトレットとアクションが正しく接続されています。 WHITEPURPLEは、定数を定義したUIColorsです。また、UIWindowtintColorPURPLEに設定しました。これはボタンまで伝播します。

- (void)viewDidLoad {
    [super viewDidLoad];
    [button setTitleColor:[UIColor whiteColor] forState:UIControlStateHighlighted];
    button.backgroundColor = WHITE;
    button.layer.borderWidth = 1.0;
    button.layer.masksToBounds = YES;
    button.layer.cornerRadius = 5.0;
    button.layer.borderColor = PURPLE.CGColor;
}

-(IBAction) buttonTouchDown:(id)sender {
    button.backgroundColor = PURPLE;
    button.layer.borderColor = WHITE.CGColor;
}

-(IBAction) buttonTouchUpOutside:(id)sender {
    button.backgroundColor = WHITE;
    button.layer.borderColor = PURPLE.CGColor;
}

-(IBAction) buttonTouchUpInside:(id)sender {
    button.backgroundColor = WHITE;
    button.layer.borderColor = PURPLE.CGColor;
}

ボタンをクリックしても、viewDidLoadで指示したようにテキストが白くなりません。

ここに、私がもっとうまくできたスクリーンショットがあります!ハイライトされた状態で見ることができるように、それは白ではなく、白と紫のミックスのようです。 UIButtonTypeCustomを使用する必要がありますか?そうすれば、iOS 7がtintColorを使って魔法をかける利点を得ることができないと聞きました。これについて正しい方法がわからない。前もって感謝します。

normalStatehighlightedState

31
Adam Langsner

UIControlStateSelectedを使用するべきではありませんか?

さて、私は自分でこれを試してみましたが、うまくいきません.

ボタンのスタイルをカスタムに設定する必要があります。 UIButtonシステムスタイルは、変更できない多くのことを行います。強調表示されたボタンの状態は、デフォルトで独自の実装になります。これは、淡色の場合はより明るいバージョンです。

UIButton *button = [UIButton buttonWithType:UIButtonTypeCustom];
[button setTitleColor:self.view.tintColor forState:UIControlStateNormal];
[button setTitleColor:[UIColor whiteColor] forState:UIControlStateSelected];

これで白いテキストの背景が得られます。

61
David Wong