2011-08-05 7 views
6

Chcę utworzyć niestandardowy przełącznik dla mojej aplikacji, w którym dostarczam trzy obrazy dla możliwych stanów (włączony, wyłączony, mousedown). Cały wygląd jest zawarty w obrazach, więc nie chcę, aby kakao podświetliło (przyciemnił) sam przycisk podczas mousedown.Dostosowywanie obiektu NSButtonCell za pomocą obrazów i podświetlanie

W tym momencie utworzyłem podklasę NSButtonCell, przeciągnąłem przycisk ukosowania NSButtonTypeMomentaryChange do mojego widoku i dostosowałem typ klasy komórki przycisku do mojej podklasy. Podklasa właśnie wdraża awakeFromNib spróbować ustawić pewne pożądane zachowanie:

- (void)awakeFromNib 
{ 
    [self setShowsStateBy:NSContentsCellMask]; 
    [self setHighlightsBy:NSContentsCellMask]; 
} 

co uważałem (zgodnie z dokumentacją) by wyłączyć mousedown-ciemnienie przycisku. To nie.

To gdzie teraz stoję i mam dwa pytania:

  • Jak mogę ustawić klasę ButtonCell po prostu pokazać moją przygotowany obraz na mousedown i nie ciemnieją/rysować granice wokół przycisku?
  • Jaki byłby najczystszy/najodpowiedniejszy sposób implementacji innego zachowania przełącznika, tj. Pokazywania pozycji wyłączenia/włączenia w zależności od poprzedniego stanu i możliwości prawidłowego przekazania swojego stanu innym obiektom?

Odpowiedz

5

Ustaw typ przycisku na On/Off. Podklasuj jego komórkę. Napisz dwie metody:

- (void)drawWithFrame:(NSRect)cellFrame inView:(NSView *)controlView 
{ 
    if ([self state]) 
    { 
     [onStateImage drawInRect:cellFrame fromRect:NSZeroRect operation:NSCompositeSourceOver fraction:1.0]; 
    } 
    else 
    { 
     [offStateImage drawInRect:cellFrame fromRect:NSZeroRect operation:NSCompositeSourceOver fraction:1.0]; 
    } 
} 
- (void)highlight:(BOOL)flag withFrame:(NSRect)cellFrame inView:(NSView *)controlView 
{ 
    if (flag){ 
     [downStateImage drawInRect:cellFrame fromRect:NSZeroRect operation:NSCompositeSourceOver fraction:1.0]; 

    } 
} 
+0

To wszystko, dziękuję. – mss

Powiązane problemy