2012-12-30 17 views
14

Mam metodę, która tworzy niestandardowy UIButton, który pozwala mi zmienić kolor przycisku za pomocą QuartzCore. Przyciski nie są jednak podświetlane po dotknięciu.Niestandardowe UIButton nie podświetlanie po dotknięciu

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

Jak mogę ustawić te przyciski jako zwykły okrągły przycisk?

Odpowiedz

13

W kodzie, należy dodać linię button.showsTouchWhenHighlighted = TRUE;

+1

To tylko wydaje się, aby Tytuł wygaszania i w. Chcę, aby tło przycisku migało na niebieski kolor po dotknięciu przycisku. – Bob

+1

@Bob Zawsze możesz ustawić podświetlanie ręczne. Na przykład: Zarejestruj się na wydarzenie 'onTouchDown' (lub cokolwiek to jest), a następnie we wprowadzeniu wykonaj coś w stylu' button.layer.backgroundColor = [UIColor BlueColor]; 'Następnie' onTouchUp' zmień kolor z powrotem na twoje ustawienie – Garrett

+5

Wow , to się komplikuje. Wszystko, co chcę zrobić, to zrobić przycisk RoundRect z niestandardowym kolorem tła. Z pewnością istnieje prostszy sposób na zrobienie tego. – Bob

-4

W Storyboard ustawić domyślny obraz tła i przycisk podświetlony obraz. na działanie przycisku napisać ten wiersz to znaczy zmienić kolor przycisku w ciągu 1 sekundy

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

Istnieje łatwy sposób wdrożyć podświetlenie na przycisku niestandardowego. 1. Utwórz obraz .png dla stanu podświetlenia (z kolorem, alfa itd.); 2. przejdź do yourbutton.xib; 3. wybierz Inspektor atrybutu po prawej stronie XCode; 4. Ustaw konfigurację stanu jako podświetloną 5. ustaw obraz .png jako obraz tła. Zapraszamy :)

5

Jeśli ktoś nadal napotyka problem - należy utworzyć UIButton tak:

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

Więc ten sposób wciąż masz iOS dbanie o wszystkie podświetlenia. Najważniejszą rzeczą jest użycie

[UIButton buttonWithType:UIButtonTypeSystem]; 

Jeśli używasz initWithFrame lub jakąkolwiek inną metodę - trzeba by wdrożyć

setTitleColor: forState: 
setBackgroundImage: forState: 
+2

Kluczem jest przycisk System zamiast przycisku Niestandardowy, nawet jeśli przycisk został utworzony na Storyboard lub nib. obraz na przycisku zmienia go w niestandardowy przycisk, więc musisz go ręcznie zmienić. –

2

Można utworzyć własną podklasę UIButton (wtedy wystarczy ustawić wszystkie thoses właściwości w konstruktor).

I trzeba zastąpić metodę kulminacyjnym UIButton

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

Dla Swift utworzyć niestandardową klasę, która dziedziczy UIButton i zastąpić isHighlighted właściwość:

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

} 
Powiązane problemy