2010-09-17 10 views

Odpowiedz

7

Potrzebowałem mieć niestandardowe tło przycisków, oto jak to zrobiłem. Zrobiłem podklasy NSButton i overrode drawRect metody:

- (void)drawRect:(NSRect)dirtyRect 
{ 
    // My buttons don't have a variable height, so I make sure that the height is fixed 
    if (self.frame.size.height != 22) { 
     self.frame = CGRectMake(self.frame.origin.x, self.frame.origin.y, self.frame.size.width, 
           22.0f); 
    } 
    // 
    switch (self.state) { 
      // Onstate graphics 
     case NSOnState: 
      NSDrawThreePartImage(self.bounds, 
           [NSImage imageNamed:@"btnmain_lb_h.png"], [NSImage imageNamed:@"btnmain_bg_h.png"], [NSImage imageNamed:@"btnmain_rb_h.png"], 
           NO, NSCompositeSourceAtop, 1.0, NO); 
      // Offstate graphics 
     default: 
     case NSOffState: 
      NSDrawThreePartImage(self.bounds, 
           [NSImage imageNamed:@"btnmain_lb.png"], [NSImage imageNamed:@"btnmain_bg.png"], [NSImage imageNamed:@"btnmain_rb.png"], 
           NO, NSCompositeSourceAtop, 1.0, NO); 
      break; 
    } 

    [super drawRect:dirtyRect]; 
} 

Wtedy mógłbym umieścić przyciski za pomocą interfejsu Builder, i aby uzyskać niestandardowe grafiki Muszę tylko zmienić klasę do mojego nowego podklasy.

1

NSButton nie ma tych samych metod wygody dla obrazów tła, co UIButton (co jest dziwne i mamy nadzieję, że Apple pokona tę lukę). Będziesz musiał utworzyć niestandardowy przycisk mój podklasy NSView i obsługiwać zmienną szerokość i rogi siebie. Nie sądzę, że będzie to łatwe, ale nie sądzę, że byłoby to bardzo trudne.

+0

Shame prawo? :) Nie tak, jak wygoda w UIButtonie jest naprawdę wygodna. – BadPirate

2

to działało perfekcyjnie dla mnie:

[self.addBuddyCommitButton.cell setBezelStyle:NSRoundedBezelStyle]; 
+0

po nadpisaniu tablicy drawBezelWithFrame: (NSRect) inView: (NSView *) controlView działa! – tomeron11

Powiązane problemy