2012-12-30 9 views
14

Ich habe eine Methode, die eine benutzerdefinierte UIButton erstellt, die mir erlaubt, die Farbe der Schaltfläche mit QuartzCore ändern. Aber die Tasten heben nicht hervor, wenn sie berührt werden.Benutzerdefinierte UIButton nicht markiert, wenn berührt

- (UIButton *)makeHeaderButton { 
    UIButton *button = [UIButton buttonWithType:UIButtonTypeCustom]; 
    UIFont *textFont = [UIFont boldSystemFontOfSize:12]; 
    UIColor *textColor = [UIColor colorWithRed:80/255.0 green:109/255.0 blue:145/255.0 alpha:1.0]; 
    UIColor *backgroundColor = [UIColor colorWithRed:250/255.0 green:250/255.0 blue:250/255.0 alpha:1.0]; 
    [button setTitleColor:textColor forState:UIControlStateNormal]; 
    button.titleLabel.font = textFont; 
    button.autoresizesSubviews = YES; 
    button.layer.cornerRadius = 8; 
    button.layer.borderWidth = 1; 
    // next 2 properties set using QuartzCore class, no other way to set button colors 
    button.layer.borderColor = [UIColor grayColor].CGColor; 
    button.layer.backgroundColor = backgroundColor.CGColor; 
    button.clipsToBounds = YES; 
    return button; 
} 

Wie kann ich diese Tasten markieren wie eine normale Runde Rect-Taste?

Antwort

13

In Ihrem Code, fügen Sie die Zeile button.showsTouchWhenHighlighted = TRUE;

+1

Das ist nur das zu machen scheint Titelausblendung und -einblendung. Ich möchte, dass der Hintergrund der Schaltfläche blau blinkt, wenn die Schaltfläche berührt wird. – Bob

+1

@Bob Sie könnten immer eine manuelle Hervorhebung einrichten. Zum Beispiel: Registrieren Sie sich für ein Ereignis 'onTouchDown' (oder was auch immer es ist) und dann in der Implementierung etwas wie 'button.layer.backgroundColor = [UIColor BlueColor];' Dann 'onTouchUp' ändern Sie die Farbe zurück zu Ihrer Einstellung – Garrett

+5

Wow Das wird kompliziert. Alles, was ich tun möchte, ist eine RoundRect-Schaltfläche mit einer benutzerdefinierten Hintergrundfarbe. Sicherlich gibt es einen einfacheren Weg, dies zu tun. – Bob

-4

in der Storyboard auf die Schaltfläche Hintergrund Standardbild eingestellt und Bild hervorgehoben. auf Button-Aktion schreiben, diese Zeile heißt die Schaltfläche Farbe ändert für 1 Sekunde

[[NSRunLoop currentRunLoop] runUntilDate:[NSDate dateWithTimeIntervalSinceNow:1]]; 
-1

Es einfache Möglichkeit ist Highlights auf benutzerdefinierte Schaltfläche zu implementieren. 1. Erstellen Sie ein .png Bild für den hervorgehobenen Zustand (mit Farbe, Alpha usw.); 2. Gehen Sie zu yourbutton.xib; 3. Wählen Sie auf der rechten Seite von XCode den Befehl Attribute Inspector; 4. Setzen Sie State Config als hervorgehoben 5. Stellen Sie Ihr .png Bild als Hintergrundbild ein. Sie sind willkommen :)

5

Wenn jemand noch das Problem begegnet - Sie UIButton wie dies schaffen sollte:

UIButton *btn = [UIButton buttonWithType:UIButtonTypeSystem]; 

btn.layer.cornerRadius = 4; 
btn.layer.masksToBounds = YES; 

[btn setTranslatesAutoresizingMaskIntoConstraints:NO]; 

[btn setBackgroundColor:[UIColor greenColor]]; 
[btn setTitleColor:[UIColor whiteColor] forState:UIControlStateNormal]; 

[btn setTitle:@"ok" forState:UIControlStateNormal]; 

*** any customisation that you would like *** 

[parentView addSubview: btn]; 

auf diese Weise also Sie noch iOS aller Hervorhebung zu kümmern. Die Hauptsache ist, mit

[UIButton buttonWithType:UIButtonTypeSystem]; 

Wenn Sie Initwithframe oder eine andere Methode verwenden - würden Sie

setTitleColor: forState: 
setBackgroundImage: forState: 
+2

Verwenden Sie eine Systemtaste vs eine benutzerdefinierte Taste ist der Schlüssel. Auch wenn die Schaltfläche auf einem Storyboard oder Nib erstellt wird Bild auf der Schaltfläche ändert es zu einer benutzerdefinierten Schaltfläche, so dass Sie es manuell ändern müssen. –

2

Sie Ihre eigene Unterklasse von UIButton erstellen implementieren haben (dann alles, was Sie einfach eingestellt thoses Eigenschaften in der Konstruktor).

Und Sie müssen die Highlight-Methode von UIButton

- (void)setHighlighted:(BOOL)highlighted { 
    if (highlighted) { 
     self.backgroundColor = [UIColor redColor]; 
    } else { 
     self.backgroundColor = [UIColor blueColor]; 
    } 
} 
0

Für Swift, erstellen Sie eine benutzerdefinierte Klasse überschreiben, die von UIButton erbt und überschreiben isHighlighted Eigenschaft:

class ButtonWithHighlight: UIButton { 

    override var isHighlighted: Bool { 
     get { 
      return super.isHighlighted 
     } 
     set { 
      if newValue { 
       backgroundColor = <#color when highlighted#> 
      } 
      else { 
       backgroundColor = <#color for normal state#> 
      } 
      super.isHighlighted = newValue 
     } 
    } 

} 
Verwandte Themen