Подтвердить что ты не робот

Изменение цвета названия заголовка 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);

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

4b9b3361

Ответ 1

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

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

Ответ 2

Как указывает @null, самый простой способ сделать это - установить тип кнопки в Interface Builder (или в коде) на "Custom".

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

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

Ответ 3

0 строк кода:

Используя Interface Builder и .XIB или .storyboard, выберите UIButton в IB:
Просмотp > Утилиты > Инспектор показа атрибутов.

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

Interface Builder solution

Ответ 4

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

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

Ответ 5

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

Ответ 6

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

Изменить: попробуйте добавить: [sender setHighlighted:NO]; в свой IBAction, который вызывается при нажатии кнопки. Решает ли он это? Я предлагаю это, потому что из [button release]; я предполагаю, что вы все еще запускаете старую версию SDK iOs, и там вы не можете отключить подсветку кнопки элегантным способом, кроме этого.

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];
}