2012-06-16 22 views
36

build jest ustawiony na iOS5 czyli tam, gdzie Rozumiem UIButton.tintColor został wprowadzony ...Dlaczego mój UIButton.tintColor nie działa? Mój cel

mam to w moim viewDidLoad na widok kontrolera

[timelineButton setTintColor:[UIColor blackColor]]; 
[timelineButton setTitle:@"test" forState:UIControlStateNormal]; 

Tekst zmienia się prawidłowo, ale przycisk ISN” t czarny?

Dzięki!

+2

Zgodnie z dokumentami: "Ta właściwość nie jest poprawna dla wszystkich typów przycisków.". Z jakiego rodzaju przycisku korzystasz? –

+0

Używanie zaokrąglonego prostokąta typu – sayguh

Odpowiedz

44

Według documentation:

Ta nieruchomość nie jest ważny dla wszystkich typów przycisków.

Musisz zmienić swój buttonType na inny one of these. (Niestety, w dokumentacji nie określono, które konkretne typy przycisków obsługują tę właściwość.)

+1

Wystarczy użyć standardowego prostokąta zaokrąglonego. Nie działa na to? – sayguh

+1

Podobno nie. –

+2

To działa dla mnie w Storyboard/Interface Builder: ustaw typ przycisku na "system", a następnie ustaw tło widoku (Uibutton) na żądany kolor - działa idealnie! –

8

Odcień podświetlonego koloru stanu. Po dotknięciu/kliknięciu na Uibutton kolor określony przez tintColor pojawia się tak długo, jak przytrzymujesz wciśnięty przycisk/kliknięcie na Uibuttonie.

resetButton.tintColor = [UIColor colorWithRed:0.764 green:1.000 blue:0.000 alpha:1.000]; 

Przycisk jest biały w stanie normalnym. Ale jeśli dotknę przycisku, kolor zmieni się na czerwony, ale tylko wtedy.

jeśli trzeba zmienić przycisk tak wygląda czerwonym lub niebieskim jeden w UIControlStateNormal następnie

zmienić UIButtonType do UIButtonTypeCustom w konstruktorze Interface lub programowo z

UIButton *resetButton = [UIButton buttonWithType:UIButtonTypeCustom]; 

Zmienianie Własne atrybuty i odtworzyć zaokrąglone rogi:

resetButton.backgroundColor = [UIColor redColor]; 
resetButton.layer.borderColor = [UIColor blackColor].CGColor; 
resetButton.layer.borderWidth = 0.5f; 
resetButton.layer.cornerRadius = 10.0f; 
+2

I nie zapomnij podać #import dla deklaracji CALayer. – zero0cool

+0

Czytelnikom należy ostrzec, że to nie wystarczy - przycisk nie reaguje, gdy go dotkniesz. Musisz podłączyć dodatkowe zdarzenia, aby zmienić kolory po naciśnięciu (patrz odpowiedź alexqinbj poniżej). –

+0

Dla mnie faktycznie działało w stanie normalnym – Zaheer

4

Dziś również ja t ten problem. Używam delegata, aby go rozwiązać.

[button addTarget:self action:@selector(buttonPress:) forControlEvents:UIControlEventTouchDown]; 
[button addTarget:self action:@selector(buttonPressReset:) forControlEvents:UIControlEventTouchUpInside | UIControlEventTouchUpOutside]; 

-(void)buttonPress:(id)sender{ 
UIButton* button = (UIButton*)sender; 
[button setBackgroundColor:[UIColor greenColor]]; 
NSLog(@"buttonPressed"); 
} 

-(void)buttonPressReset:(id)sender{ 
UIButton* button = (UIButton*)sender; 
[button setBackgroundColor:[UIColor redColor]]; 
NSLog(@"buttonPressReset"); 
} 
+0

To nie jest kompletne - powinieneś również dodać UIControlEventTouchDragEnter do zdarzeń, które wyzwalają buttonPress, i UIControlEventTouchDragExit do zdarzeń, które wyzwalają buttonPressReset. –

6

Jak podano w innych odpowiedziach, odcień nie działa dla niestandardowych typów przycisków. Upewnij się, że jawnie zadeklarowałeś typ przycisku. Nie wystarczy użyć [UIButton alloc] startowych]

będzie działać:

UIButton *mybutton = [UIButton buttonWithType:UIButtonTypeRoundedRect]; 
[mybutton setImage:[UIImage imageNamed:@"myImage"] forState:UIControlStateNormal]; 
mybutton.tintColor = [ODTheme blueTintColor]; 
22

Upewnij się, że przycisk "typ" jest ustawiony na System. Jeśli jest ustawiony na Custom, może to być przyczyną zmiany koloru przycisku. To, co mi się przydarzyło i zmiana typu na System naprawiła to.

2

powinien spróbować tej metody:

- (void)setTitleColor:(UIColor *)color 
      forState:(UIControlState)state 
2

Wystarczy ustawić UIButton wpisać Systemu w Storyboard.

enter image description here

A potem w kodzie po prostu użyć:

myButton.tintColor = UIColor.whiteColor() 
1

Jeśli Twój typ UIButton to system, wówczas działa tylko właściwość koloru tinty. Najpierw należy ustawić typ przycisku na system, a następnie zastosować kolor tinty dla określonego stanu.

btn.buttonType = UIButtonTypeSystem; 
[btn setTitleColor:[UIColor redColor] forState:UIControlStateNormal]; 
1

Znalazłem 3 rzeczy, których należy przestrzegać.

1. renderowanie obrazu jako Default

idź do Images.xcassets > Your Image > Show the Attributes inspector > Render As > Default

render as default

2. Upewnij się, że przycisk jest typ systemu

3. Teraz przycisk Zmień w tintColor .

Gotowe.

Powiązane problemy