Изменение цвета заголовка кнопки UIB на выделении - как его отключить?

Я создал кнопку. Цвет заголовка по умолчанию черный. Но когда я нажимаю на него, цвет меняется на синий и никогда не меняется снова, как это происходит? Кто-нибудь может сказать мне, почему? И я хочу, чтобы заголовок кнопки оставался черным все время. Как я могу это сделать? я пытался

[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);

Проблема решена!

6 ответов

Решение

Ты можешь использовать

[UIButton setTitleColor:forState:]

для всех штатов цвет заголовка останется одинаковым для всех штатов.

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

Примечание. Чтобы избежать трехкратного ввода или вставки вышеуказанного кода, вы можете использовать следующий код, предложенный Уиллом,

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

Как указывает @null, на сегодняшний день самый простой способ сделать это - установить тип кнопки в Интерфейсном Разработчике (или в коде) на "Пользовательский".

Если вам нужно повторить это поведение стандартной кнопкой, переопределите setHighlighted метод, чтобы запретить настройку альфа-канала titleLabel:

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

0 строк кода:

Используя Интерфейсный Разработчик и любой .XIB или же .storyboardвыберите свой UIButton в IB:
Вид> Утилиты> Показать атрибуты инспектора.

Выберите " Конфигурация состояния" (по умолчанию): " Выделено", " Выбрано" или " Отключено" и измените атрибут " Цвет текста".

Решение Interface Builder

Есть несколько комментариев, указывающих на это, но для того, чтобы это было актуальным ответом:

Установите тип кнопки на Custom в вашей раскадровке или в коде:[UIButton buttonWithType:UIButtonTypeCustom];

Будьте осторожны, система проигнорирует setTitleColor(_:for:), если кнопка не является настраиваемой.

Для чего-то более пригодного для повторного использования вы можете рассмотреть это, поскольку оно не нарушает принцип СУХОЙ. Добавьте это как категорию на 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)]];

Вы должны инициализировать свою кнопку с помощью UIButtonTypeCustom вместо UIButtonTypeRoundedRect

Я думаю, что Mayuur прав. Вы пробовали другой цвет вместо "darkTextColor"? Насколько я знаю, "darkTextColor" - это системный цвет, который используется для написания текста на светлом фоне. Возможно, попробуйте blackColor, если предложение mayuurs не работает.

Изменить: Попробуйте добавить: [sender setHighlighted:NO]; в ваш IBAction, который вызывается при нажатии кнопки. Это решает это? Я предлагаю это, потому что из [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];
}
Другие вопросы по тегам