Цвет заголовка кнопки 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)
NickCoder
источник