web-dev-qa-db-ja.com

ハイライト時のUIButtonタイトルの色の変更-オフにする方法

ボタンを作成しました。タイトルの色はデフォルトでは黒です。しかし、私がそれを押すと、色が少し青い色に変わり、二度と元に戻りません。これはどのように起こりますか?誰に理由を教えてもらえますか?そして、ボタンのタイトルを常に黒のままにしておきたい。どうやってやるの?私が試してみました

[button setTitleColor:[UIColor darkTextColor] forState:UIControlStateHighlighted];
[button setTitleColor:[UIColor darkTextColor] forState:UIControlStateSelected];

しかし、効果はありません。これをコードに追加すると、ボタンのタイトルは常に青になります。

次のようにコーディングします。

UIButton *button = [UIButton buttonWithType:UIButtonTypeRoundedRect];
[button setFrame:CGRectMake(20, 360, 280, 44)];
[button setTitle:NSLocalizedString(@"Continue", @"Label: TextLabel in Continue button") forState:UIControlStateNormal];
button.titleLabel.font = [UIFont fontWithName:@"Helvetica-Bold" size:20.0f];
button.titleLabel.textColor = [UIColor darkTextColor];
button.titleLabel.shadowColor = [UIColor blackColor];
button.autoresizingMask = UIViewAutoresizingFlexibleLeftMargin|UIViewAutoresizingFlexibleRightMargin|UIViewAutoresizingFlexibleBottomMargin|UIViewAutoresizingFlexibleWidth;

[self.view addSubview:button];
[button release];

みんなに感謝します。私は問題を愛しました。根本的な原因はだと思います

button.titleLabel.textColor = [UIColor darkTextColor];

これを削除して使用すると

button setTitleColor:(UIColor) forState:(UIControlState);

問題は解決された!

39
NewXcoder

使用できます

[UIButton setTitleColor:forState:]

すべての州について、タイトルの色はすべての州で同じままです。

[button setTitleColor:[UIColor redColor] forState:UIControlStateHighlighted];
[button setTitleColor:[UIColor redColor] forState:UIControlStateNormal];
[button setTitleColor:[UIColor redColor] forState:UIControlStateSelected];

注:上記のコードを3回入力するか貼り付けるのをやめるには、Willが提案する次のコードを使用できます

[button setTitleColor:[UIColor redColor] forState:(UIControlStateHighlighted | UIControlStateNormal | UIControlStateSelected)];
53
PJR

@nullが指摘しているように、これを行う最も簡単な方法は、Interface Builder(またはコード)のボタンタイプを「Custom」に設定することです。

標準のボタンを使用してこの動作を複製する必要がある場合は、setHighlightedメソッドをオーバーライドして、titleLabelのアルファチャネルも調整されないようにします。

- (void)setHighlighted:(BOOL)highlighted
{
    [super setHighlighted:highlighted];
    self.titleLabel.alpha = 1.0;
}
28
brandonscript

0行のコード:

Interface Builderと.XIBまたは.storyboard、IBでUIButtonを選択します。
[表示]> [ユーティリティ]> [属性インスペクターを表示]

SelectState Config(デフォルト)HighlightedSelectedまたはDisabledのいずれかおよびText Color属性を変更します。

Interface Builder solution

22
SwiftArchitect

これを指摘するコメントがいくつかありますが、実際の答えとしてそれを得るために:

ストーリーボードまたはコードでボタンタイプをCustomに設定します:[UIButton buttonWithType:UIButtonTypeCustom];

3
Eric

DRYの原則に違反しません。UIButtonのカテゴリとしてこれを追加してください。

- (void)oka_setTitleColor:(UIColor *)color forStates:(NSArray *)states;
{
  [states enumerateObjectsUsingBlock:^(NSNumber *state, NSUInteger idx, BOOL *stop) {
    [self setTitleColor:color forState:[state integerValue]];
  }];
}

あなたのケースの使用例:

  [self oka_setTitleColor:[UIColor darkTextColor]
               forStates:@[@(UIControlStateNormal), @(UIControlStateHighlighted), @(UIControlStateSelected)]];
1
Oliver Atkinson

まゆるは正しいと思います。 「darkTextColor」の代わりに別の色を試しましたか? 私の知る限り 「darkTextColor」は、明るい背景にテキストを書き込むために使用されるシステム固有の色です。 mayuursの提案が機能しない場合は、blackColorを試してください。

編集:ボタンを押すと呼び出されるIBActionに[sender setHighlighted:NO];を追加してみてください。解決しましたか? [button release];から、iOs SDKの古いバージョンをまだ実行しているため、これ以外のエレガントな方法でボタンのハイライトを無効にするオプションがないため、これをお勧めします。

Edit2:ボタンをプログラムで作成していますが、IBActionでボタンを接続しているようには見えません。これを[[UIButton alloc] init];の下に追加します

[button addTarget:self action:@selector(myIBAction) forControlEvents:UIControlEventTouchUpInside];

次に、次のようなIBActionメソッドを作成します。

- (IBAction)myIBAction:(UIButton *)sender; /* In Header File */

- (IBAction)myIBAction:(UIButton *)sender{ /* In Implementation File */
        [sender setHighlighted:NO];
}