Nsbutton с шириной переменной размер, округлые углы

StackOverflow https://stackoverflow.com/questions/3738482

  •  03-10-2019
  •  | 
  •  

Вопрос

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

Это было полезно?

Решение

Мне нужно было иметь пользовательский фон кнопки, вот как я это сделал. Я сделал подкласс Nsbutton и переопределить метод нанесения недели:

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

Тогда я мог бы поставить кнопки с помощью интерфейса Builder и получить пользовательскую графику, которую я просто должен изменить класс на мой новый подкласс.

Другие советы

Это отлично работало для меня:

[self.addBuddyCommitButton.cell setBezelStyle:NSRoundedBezelStyle];

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

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top