2011-06-18 7 views
5

Po wyłączeniu moich przycisków tekst staje się szary (wcześniej był czarny). W moim oknie wynikiem jest to, że tekst nie jest czytelny, gdy przycisk jest wyłączony.Czy istnieje sposób, aby zapobiec szarzejącemu się tekstowi po wyłączeniu przycisku?

Zajrzałem do końca w dokumentacji NSButton/NSButtonCell/NSCell/NSControl, ale nie znalazłem żadnego sposobu, aby zachować czarny tekst. Czy wiesz, jak mogę to zrobić?

+0

mógłbyś zastąpić właściwości przycisku, a nie wyłączając go - ale wyłączyć oddziaływanie może , lub po prostu zmienić kolor/obramowanie przycisku, aby zachować kolor tekstu? Zastanawiam się, czy wypróbowałeś tę poprawkę, ale wiem, co mówisz. – Luke

+0

mmmm .. myślę, że mogę ustawić obraz/alternatywny obraz na tę samą "wyłączoną" skórę, aby użytkownik zrozumiał, że jest to wyłączone. Ale spowoduje to, że kod będzie bardzo brzydki - musiałbym sprawdzić każdą funkcję działania, jeśli przycisk jest wyłączony lub nie. –

+0

W systemie iOS mogę to zrobić: myButton.userInteractionDisabled = YES, a następnie ustawić alfa, aby nadać mu wygląd być wyłączonym. Wyobrażam sobie, że możesz zrobić coś podobnego z twoim NSButtonem. Żeby potwierdzić, po prostu ustawiłeś właściwość enabled na NIE, skąd pochodzi twój problem z kolorem tekstu? – Luke

Odpowiedz

1

Można ustawić właściwości przycisków (czcionkę, kolory) dla każdego stanu w IB. Czy zatem ustawienie koloru dla wyłączonego stanu na czarną pomoc?

+0

Nie widzę takiej opcji w IB. Używam xcode 4 z wbudowanym IB –

+0

Czy kakao nie jest kakao. – Kappe

-1

w dotyku kakao ma interfejs API do że:

[myButton SetTextColor [UIColor blackColor] forState: UIControlStateDisabled];

Za kakao nie wiem.

+4

To rozwiązuje problem Cocoa Touch, ale nie Cocoa, o to pyta pytający. –

+0

Tęskniłem za tym, dzięki za wskazanie –

0

Podklasa NSButtonCell i przypisz ją do przycisku CELL w IB (nie bezpośrednio PRZYCISK BUTTONOWY -> o jeden poziom głębiej). W podklasie realizować następujące i modifiy rozmiar, czcionkę i kolor jak chcesz:

- (NSAttributedString*)attributedTitleForString:(NSString*)string 
{ 
    // Colors 
    NSColor *disabledColor = [NSColor grayColor]; 
    NSColor *enabledColor = [NSColor redColor]; 

    // Font 
    NSMutableParagraphStyle *style = [[NSMutableParagraphStyle alloc] init]; 
    [style setAlignment:NSLeftTextAlignment]; 
    NSFont *font = [NSFont systemFontOfSize:11]; 

    // Enabled 
    NSDictionary *enabledAttrsDictionary = [NSDictionary dictionaryWithObjectsAndKeys: 
             enabledColor, NSForegroundColorAttributeName, 
             style, NSParagraphStyleAttributeName, 
             font, NSFontAttributeName, 
             nil]; 
    NSAttributedString* enabledTitle = [[NSAttributedString alloc]initWithString:string attributes:enabledAttrsDictionary]; 

    // Disabled 
    NSDictionary *disabledAttrsDictionary = [NSDictionary dictionaryWithObjectsAndKeys: 
             disabledColor, NSForegroundColorAttributeName, 
             style, NSParagraphStyleAttributeName, 
             font, NSFontAttributeName, nil]; 

    NSAttributedString* disabledTitle = [[NSAttributedString alloc]initWithString:string attributes:disabledAttrsDictionary]; 

    if (![self isEnabled]) 
     return disabledTitle; 
    else 
     return enabledTitle; 
} 

EDIT: Działa tylko jeśli setWantsLayers jest fałszywa

Powiązane problemy