5

创建具有自定义背景图像的 NSButton 的最佳方法是什么,它能够具有可变宽度,而不会使角边框看起来被拉伸?我知道有一些方便的方法可以用 UIButton 做到这一点:http: //jainmarket.blogspot.com/2009/04/create-uibuttonbutton-with-images.html但我在 NSButton 中没有看到任何类似的东西。

4

3 回答 3

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

然后我可以使用 Interface Builder 放置按钮,并且要获得自定义图形,我只需将类更改为我的新子类。

于 2010-09-20T22:18:04.577 回答
2

这对我来说非常好:

[self.addBuddyCommitButton.cell setBezelStyle:NSRoundedBezelStyle];
于 2013-04-03T10:15:32.960 回答
1

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

于 2010-09-18T00:10:40.370 回答