2010-09-17 65 views

回答

7

我需要一个自定义按钮背景,下面是我如何做到的。我做了一个NSButton子类,并推翻的drawRect方法:

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

然后我可以把使用界面生成器的按钮,并获得自定义图形我只需要将类更改为我的新的子类。

1

NSButton没有像UIButton那样的背景图片的方便方法(这很奇怪,希望Apple能够弥合这种差距)。你需要创建一个自定义按钮我的子类NSView和自己处理变量的宽度和角落。我不认为这会很容易,但我认为这也不是非常困难。

+0

羞耻吗? :)不像UIButton中的便捷方法真的很方便。 – BadPirate 2010-09-20 22:18:41

2

这个工作完美的罚款对我来说:

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

覆盖drawBezelWithFrame后:(NSRect)frame inView:(NSView *)controlView它的工作原理! – tomeron11 2013-05-15 08:51:51