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 に答える