Kolor tekstu tytułu UIButton

Odpowiedzi:

438

posługiwać się

Cel C

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

Szybki

headingButton.setTitleColor(.black, for: .normal)
Amit Singh
źródło
2
to działa. ale kod z pierwotnego pytania również często działa. ktoś wie, dlaczego tytuł tylko czasami nie odpowiada kodowi w pytaniu?
crgt
7
Powodem jest to, że gdy przycisk zostanie kliknięty lub w inny sposób zmieni stan, kod w przycisku resetuje właściwości titleLabel w celu dopasowania do wewnętrznych ustawień przycisku dla tego stanu.
psycotica0
1
dokumentacja firmy apple stwierdza, co następuje: „Nie używaj obiektu etykiety do ustawiania koloru tekstu ani koloru cienia. Zamiast tego użyj metod setTitleColor: forState: i setTitleShadowColor: forState: tej klasy, aby wprowadzić te zmiany.” Nie ma jednak prawdziwego wyjaśnienia „dlaczego”.
clauswey
NAJWAŻNIEJSZE, gdy ustawisz kolor dla UIControlStateNormal, nie ma potrzeby ustawiania go dla wszystkich innych stanów (jeśli chcesz, aby przycisk wyglądał tak samo po naciśnięciu).
drpawelo
jak globalnie zmienić kolor tekstu przycisku w delegacie aplikacji. Może używając UIButton.appearance (). SetTitleColor?
Awais Fayyaz,
5

Stworzyłem niestandardową klasę MyButton rozszerzoną z UIButton. Następnie dodał to w Identity Inspector:

wprowadź opis obrazu tutaj

Następnie zmień typ przycisku na Niestandardowy :

wprowadź opis obrazu tutaj

Następnie możesz ustawić atrybuty takie jak textColori UIFontdla UIButtonróżnych stanów:

wprowadź opis obrazu tutaj

Następnie utworzyłem również dwie metody wewnątrz MyButtonklasy, które muszę wywołać w moim kodzie, gdy chcę, aby a UIButtonbyło wyświetlane jako podświetlone:

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

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

Musisz ustawić titleColorna normalny, podświetlony i wybrany, UIControlStateponieważ zgodnie z dokumentacją może istnieć więcej niż jeden stan naraz UIControlState. Jeśli nie utworzysz tych metod, UIButtonwyświetlą one zaznaczenie lub wyróżnienie, ale nie pozostaną one w UIColorustawieniach, które ustawisz wewnątrz, UIInterface Builderponieważ są one dostępne tylko do krótkiego wyświetlania wyboru, a nie do wyświetlania samego wyboru.

Alex Cio
źródło
Czy ostatni fragment kodu nie powinien używać |zamiast &?
130e13a
5

W Swift:

Zmiana koloru tekstu etykiety jest zupełnie inna niż zmiana w przypadku pliku UIButton. Aby zmienić kolor tekstu na UIButtonpotrzeby tej metody:

self.headingButton.setTitleColor(UIColor(red: 107.0/255.0, green: 199.0/255.0, blue: 217.0/255.0), forState: UIControlState.Normal)
Prashant Chaudhary
źródło
0

wersja swift 5:

Używając domyślnego wbudowanego koloru:

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

LUB

Możesz użyć własnego koloru, używając metody 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
źródło