2012-12-30 22 views
14

Ho un metodo che crea un UIButton personalizzato che mi consente di cambiare il colore del pulsante utilizzando QuartzCore. Ma i pulsanti non si evidenziano quando vengono toccati.UIButton personalizzato non evidenziato quando viene toccato

- (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; 
} 

Come posso rendere questi pulsanti evidenziati come un normale pulsante rotondo retto?

risposta

13

Nel codice, aggiungere la riga button.showsTouchWhenHighlighted = TRUE;

+1

Questo sembra solo per fare il dissolvenza del titolo e in. Voglio che lo sfondo del pulsante lampeggi a un colore blu quando si tocca il pulsante. – Bob

+1

@Bob È sempre possibile impostare un'evidenziazione manuale. Ad esempio: registrati per un evento 'onTouchDown' (o qualsiasi cosa sia) e poi nell'implementazione fai qualcosa come' button.layer.backgroundColor = [UIColor BlueColor]; 'Quindi' onTouchUp' cambia il colore indietro alle tue impostazioni – Garrett

+5

Wow questo si sta complicando Tutto quello che voglio fare è creare un pulsante RoundRect con un colore di sfondo personalizzato. Sicuramente c'è un modo più semplice per farlo. – Bob

-4

In Storyboard impostare l'immagine di default pulsante di sfondo e evidenziato immagine. sull'azione pulsante Scrivi questa linea cioè cambiare il colore del pulsante per 1 secondo

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

Non c'è modo facile da implementare evidenziazione sul pulsante personalizzato. 1. creare l'immagine .png per lo stato di evidenziazione (con colore, alfa, ecc.); 2. vai a yourbutton.xib; 3. selezionare Attributi Ispettore a destra di XCode; 4. imposta Config stato come evidenziato 5. imposta l'immagine .png come immagine di sfondo. Sei il benvenuto :)

5

Se qualcuno incontra ancora il problema - è necessario creare UIButton come questo:

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]; 

Quindi questo modo si hanno ancora iOS curando tutti evidenziazione. La cosa principale sta usando

[UIButton buttonWithType:UIButtonTypeSystem]; 

Se si utilizza initWithFrame o qualsiasi altro metodo - che avrebbe dovuto implementare

setTitleColor: forState: 
setBackgroundImage: forState: 
+2

Utilizzare un pulsante Sistema o un pulsante personalizzato è la chiave Anche se il pulsante è stato creato su uno Storyboard o Pennino. l'immagine sul pulsante lo trasforma in un pulsante personalizzato, quindi è necessario modificarlo manualmente. –

2

È possibile creare la propria sottoclasse di UIButton (quindi è sufficiente impostare tutte thoses immobili a il costruttore).

E si deve eseguire l'override del metodo clou della UIButton

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

Per Swift, creare una classe personalizzata che eredita da UIButton e sovrascrivere isHighlighted proprietà:

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 
     } 
    } 

} 
Problemi correlati