Цвет заголовка кнопки UIButton


168

Я устанавливаю цвет текста для UIButton

headingButton.titleLabel.textColor = [UIColor colorWithRed:36/255.0 
                                                     green:71/255.0 
                                                      blue:113/255.0 
                                                     alpha:1.0];

Это не меняет цвет того же кода, который я использую в другом коде, он работает.


Ответы:


438

использование

Objective-C

[headingButton setTitleColor:[UIColor colorWithRed:36/255.0 green:71/255.0 blue:113/255.0 alpha:1.0] forState:UIControlStateNormal];

стриж

headingButton.setTitleColor(.black, for: .normal)

2
это работает. но код в оригинальном вопросе также часто работает. Кто-нибудь знает, почему заголовок только иногда не отвечает на код в вопросе?
crgt

7
Причина в том, что когда кнопка нажата или иным образом изменяет состояние, код в кнопке сбрасывает свойства titleLabel в соответствии с внутренними настройками, которые кнопка имеет для этого состояния.
psycotica0

1
документация apple гласит следующее: «Не используйте объект метки для установки цвета текста или цвета тени. Вместо этого используйте setTitleColor: forState: и setTitleShadowColor: forState: методы этого класса, чтобы внести эти изменения». Нет реального объяснения «почему», хотя.
Клаусвей

НАИБОЛЕЕ ВАЖНО, когда вы устанавливаете цвет для UIControlStateNormal, нет необходимости устанавливать его для всех остальных состояний (если вы хотите, чтобы ваша кнопка выглядела одинаково при нажатии).
drpawelo

Как изменить цвет текста кнопки глобально в приложении делегата. Может быть, используя UIButton.appearance (). SetTitleColor?
Awais Fayyaz

5

Я создал собственный класс MyButton, расширенный с UIButton. Затем добавил это внутри Identity Inspector:

введите описание изображения здесь

После этого измените тип кнопки на Custom :

введите описание изображения здесь

Затем вы можете установить атрибуты как textColorи UIFontдля вашего UIButtonдля различных состояний:

введите описание изображения здесь

Затем я также создал два метода внутри MyButtonкласса, которые я должен вызывать внутри своего кода, когда я хочу, UIButtonчтобы отображалось как выделено:

- (void)changeColorAsUnselection{
    [self setTitleColor:[UIColor colorFromHexString:acColorGreyDark] 
               forState:UIControlStateNormal & 
                        UIControlStateSelected & 
                        UIControlStateHighlighted];
}

- (void)changeColorAsSelection{
    [self setTitleColor:[UIColor colorFromHexString:acColorYellow] 
               forState:UIControlStateNormal & 
                        UIControlStateHighlighted & 
                        UIControlStateSelected];
}

Вы должны установить titleColorдля обычного, выделенного и выбранного, UIControlStateпотому что может быть более одного состояния одновременно в соответствии с документацией UIControlState. Если вы не создадите эти методы, они UIButtonбудут отображать выделение или выделение, но они не останутся в UIColorнастройках, которые вы установили внутри, UIInterface Builderпотому что они просто доступны для краткого отображения выделения, а не для отображения самого выделения.


Разве последний фрагмент кода не должен использовать |вместо &?
130e13a

5

В Свифте:

Изменение цвета текста метки совершенно отличается от его изменения для a UIButton. Чтобы изменить цвет текста для UIButtonиспользования этого метода:

self.headingButton.setTitleColor(UIColor(red: 107.0/255.0, green: 199.0/255.0, blue: 217.0/255.0), forState: UIControlState.Normal)

0

Swift 5 версия:

Используя встроенный цвет по умолчанию:

  1. button.setTitleColor(UIColor.green, for: .normal)

ИЛИ

Вы можете использовать свой собственный цвет, используя метод RGB:

  1. button.setTitleColor(UIColor(displayP3Red: 0.0/255.0, green: 180.0/255.0, blue: 2.0/255.0, alpha: 1.0), for: .normal)
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.