NSButton с переменной шириной размера, закругленные углы - PullRequest
5 голосов
/ 17 сентября 2010

Каков наилучший способ создания NSButton с настраиваемым фоновым изображением, которое может иметь переменную ширину, не делая растянутую рамку угла? Я знаю, что есть удобные методы сделать это с помощью UIButton: http://jainmarket.blogspot.com/2009/04/create-uibuttonbutton-with-images.html, но я не видел ничего похожего в NSButton.

Ответы [ 4 ]

7 голосов
/ 21 сентября 2010

Мне нужно было иметь собственный фон кнопки, вот как я это сделал.Я создал подкласс 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, и чтобы получить пользовательскую графику, мне просто нужно изменить класс на мой новый подкласс.

2 голосов
/ 03 апреля 2013

это прекрасно сработало для меня:

[self.addBuddyCommitButton.cell setBezelStyle:NSRoundedBezelStyle];
1 голос
/ 18 сентября 2010

NSButton не имеет тех же удобных методов для фоновых изображений, что и UIButton (что странно и можно надеяться, что Apple устранит этот пробел).Вам нужно будет создать собственную кнопку подкласса NSView и обрабатывать переменную ширину и углы самостоятельно.Я не думаю, что это будет легко, но я не думаю, что это будет ужасно сложно.

0 голосов
/ 21 декабря 2013

Это видео объясняет метод, который кажется простым и требует только одного изображения кнопки: http://youtu.be/7MZJxPOo_xU

...