2012-10-23 12 views
33

Ich habe eine Schaltfläche erstellt. Die Farbe des Titels ist standardmäßig schwarz. Aber wenn ich es drücke, ändert sich die Farbe ein wenig blau und ändert sich nie wieder. Wie geschieht das? Kann mir jemand sagen warum? Und ich möchte, dass der Titel des Buttons die ganze Zeit schwarz bleibt. Wie kann ich das machen? Ich habe versuchtUIButton title color change on highlight - Wie wird es ausgeschaltet?

[button setTitleColor:[UIColor darkTextColor] forState:UIControlStateHighlighted]; 
[button setTitleColor:[UIColor darkTextColor] forState:UIControlStateSelected]; 

Aber es gibt keinen Effekt. Wenn ich das in meinem Code hinzufüge, scheint der Titel der Schaltfläche immer blau zu sein.

Code wie folgt.

UIButton *button = [UIButton buttonWithType:UIButtonTypeRoundedRect]; 
[button setFrame:CGRectMake(20, 360, 280, 44)]; 
[button setTitle:NSLocalizedString(@"Continue", @"Label: TextLabel in Continue button") forState:UIControlStateNormal]; 
button.titleLabel.font = [UIFont fontWithName:@"Helvetica-Bold" size:20.0f]; 
button.titleLabel.textColor = [UIColor darkTextColor]; 
button.titleLabel.shadowColor = [UIColor blackColor]; 
button.autoresizingMask = UIViewAutoresizingFlexibleLeftMargin|UIViewAutoresizingFlexibleRightMargin|UIViewAutoresizingFlexibleBottomMargin|UIViewAutoresizingFlexibleWidth; 

[self.view addSubview:button]; 
[button release]; 

Danke an alle. Ich habe das Problem geliebt. Ich denke, die Ursache ist

button.titleLabel.textColor = [UIColor darkTextColor]; 

Wenn ich diese entfernen, und verwenden Sie

button setTitleColor:(UIColor) forState:(UIControlState); 

Das Problem ist gelöst!

+1

Mit welcher Methode ist diese Schaltfläche verknüpft? – esqew

+0

Möchten Sie das Hervorhebungsbild deaktivieren? Deaktivieren Sie in der Xib-Datei die Option "Bild anpassen". – mayuur

+0

Bisher habe ich die zugehörige Methode nicht implementiert. – NewXcoder

Antwort

52

die Staaten, dann Titelfarbe bleibt für alle Staaten gleich.

[button setTitleColor:[UIColor redColor] forState:UIControlStateHighlighted]; 
[button setTitleColor:[UIColor redColor] forState:UIControlStateNormal]; 
[button setTitleColor:[UIColor redColor] forState:UIControlStateSelected]; 

Hinweis: Typ avoide oder über Code dreimal fügen Sie Code von Will vorgeschlagen folgenden verwenden können,

[button setTitleColor:[UIColor redColor] forState:(UIControlStateHighlighted | UIControlStateNormal | UIControlStateSelected)]; 
+2

Wenn ich diesen Code hinzufüge, wird der Titel immer dunkelblau. Ich denke, dass diese Farbe die Standardfarbe von UIButton ist, aber wie kann es zurück ändern – NewXcoder

+15

Sie können vermeiden, alle drei Zeilen zu schreiben oder einzufügen, indem Sie einfach schreiben '[setTitleColor: [UIColor redColor] forState: UIControlStateHighlighted & UIControlStateNormal & UIControlStateSelected];' –

+1

@WillAndrew Wie benutzt man das '&' Ding in Swift? – IIllIIll

0

Ich denke, dass Mayuur Recht hat. Hast du eine andere Farbe anstelle von "darkTextColor" versucht? As far as I know "darkTextColor" ist eine systemspezifische Farbe, die zum Schreiben von Text auf hellen Hintergründen verwendet wird. Vielleicht versuche blackColor, wenn Mayuurs Vorschlag nicht funktioniert.

Bearbeiten: Versuchen Sie hinzufügen: [sender setHighlighted:NO]; in Ihre IBAction, die beim Drücken der Taste aufgerufen wird. Löst es es? Ich schlage das vor, weil ich von der [button release]; Ich denke, dass Sie immer noch eine alte Version des iOs SDK laufen und dort haben Sie nicht die Möglichkeit, die Hervorhebung einer Taste auf eine elegante Art und Weise anders als diese zu deaktivieren.

Edit2: Sie erstellen die Schaltfläche programmgesteuert, aber ich sehe nicht, dass Sie es mit einer IBAction verbinden. Fügen Sie diese unter Ihrem [[UIButton alloc] init];

[button addTarget:self action:@selector(myIBAction) forControlEvents:UIControlEventTouchUpInside]; 

Dann ein IBAction Methode wie folgt erstellen: [: forState: UIButton setTitleColor]

für alles, was Sie

können

- (IBAction)myIBAction:(UIButton *)sender; /* In Header File */ 

- (IBAction)myIBAction:(UIButton *)sender{ /* In Implementation File */ 
     [sender setHighlighted:NO]; 
} 
+0

Ich habe es versucht, aber es scheint nicht funktionieren! Auch danke – NewXcoder

+0

Ist der Button korrekt an die IBAction angeschlossen? Könnten Sie die IBAction zu Ihrer Frage hinzufügen? –

+0

Ich erstelle die Schaltfläche in meinem Code und verwende [Schaltfläche addTarget: self action: @selector (continueButtonPressed) forControlEvents: UIControlEventTouchDown]; – NewXcoder

1

Für etwas mehr wiederverwendbar Sie dies prüfen könnten, wie es tut das DRY-Prinzip verletzen. Fügen Sie dies als Kategorie für UIButton hinzu.

- (void)oka_setTitleColor:(UIColor *)color forStates:(NSArray *)states; 
{ 
    [states enumerateObjectsUsingBlock:^(NSNumber *state, NSUInteger idx, BOOL *stop) { 
    [self setTitleColor:color forState:[state integerValue]]; 
    }]; 
} 

Beispiel für die Verwendung für Ihren Fall:

[self oka_setTitleColor:[UIColor darkTextColor] 
       forStates:@[@(UIControlStateNormal), @(UIControlStateHighlighted), @(UIControlStateSelected)]]; 
+1

Ich denke Kommentar des @ WillAndrew besser aussehen: [Taste setTitleColor: [UIColor RedColor] forState : UIControlStateHighlighted & UIControlStateNormal & UIControlStateSelected]; – JakubKnejzlik

21

Wie @null weist darauf hin, bei weitem der einfachste Weg, dies zu tun, ist die Schaltfläche Typ im Interface Builder setzen (oder in Code) auf " Brauch".

Wenn Sie dieses Verhalten mit einer Standard-Schaltfläche replizieren müssen, überschreiben die setHighlighted Methode des Alphakanal des Titlelabel aus der Anpassung zu verhindern:

- (void)setHighlighted:(BOOL)highlighted 
{ 
    [super setHighlighted:highlighted]; 
    self.titleLabel.alpha = 1.0; 
} 
+44

Sie sollten den UIButton-Typ von "System" zu "Benutzerdefiniert" ändern. – null

+0

Hey .... je mehr du weißt! – brandonscript

+0

Aber wenn Sie wie @Remus sagte, vor all Ihren benutzerdefinierten Sachen, fügen Sie [super setHighlighted: hervorgehoben]; – StinkyCat

19

0 Codezeilen:

Verwendung von Oberflächen Builder und entweder .XIB oder .storyboard, wählen Sie Ihre UIButton in IB:
Ansicht> Dienstprogramme> Show Attribute Inspector.

Select Staat Config (Default) nach einem der Hervorgehoben, Ausgewählte oder Disabled und ändern Sie den Textfarbe Attribut.

Interface Builder solution

2

Es gibt ein paar Kommentare dies unter Hinweis darauf, aber um es als eine tatsächliche Antwort zu haben:

die Taste Typ auf Custom in Ihrem Storyboard oder in Code: [UIButton buttonWithType:UIButtonTypeCustom];