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