2010-09-17 11 views

cevap

7

Özel bir düğme arka planına ihtiyacım vardı, işte nasıl yaptım. Bir NSButton alt sınıfı yapılmış ve yöntemi drawRect overrode:

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

Sonra Interface Builder kullanarak düğmeleri koyabilir ve sadece benim yeni alt sınıfa sınıf değiştirmek zorunda özel grafik olsun.

1

NSButton için arka plan resimleri şu an için bu kullanışlı yöntemler gerekmez: UIButton (Bu garip bir şey var: Apple bridges that gap). Alt sınıflamamdaki NSView özel bir düğme oluşturup değişken genişlik ve köşeleri kendiniz ele almanız gerekir. Kolay olacağını düşünmüyorum, ama bence çok zor olacağını da sanmıyorum.

+0

Shame? :) UIButton kolaylık yöntemi gerçekten bu kadar uygun değil. – BadPirate

2

bu benim için mükemmel iyi çalıştı:

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

drawBezelWithFrame'i geçersiz kıldıktan sonra: (NSRect) frame inView: (NSView *) controlView çalışır! – tomeron11

İlgili konular