NSButton белый фон при нажатии - PullRequest
8 голосов
/ 13 октября 2011

При создании кнопки «Какао» с пользовательским изображением и альтернативным изображением у меня странное поведение.В нажатом состоянии фон кнопки становится белым.Я добавляю кнопку в качестве подпредставления прозрачного окна (окно HUD).

Я пробую все известные мне техники:

NSButton *closeButton = [[NSButton alloc] initWithFrame:NSMakeRect(0.0, 0.0, 30.0, 30.0)];
        [closeButton setFrameOrigin:NSMakePoint(0.0, 0.0)];
        [closeButton setImagePosition:NSImageOnly];
        [closeButton setAction:@selector(closeWindowAction:)];
        [closeButton setBordered:NO];
        [closeButton setTransparent:NO];

        [closeButton setImage:[NSImage imageNamed:@"icon-tclose-off"]];
        [closeButton setAlternateImage:[NSImage imageNamed:@"icon-tclose-on"]];
        [closeButton setBezelStyle:NSShadowlessSquareBezelStyle];
        [closeButton setButtonType:NSMomentaryLightButton];

        //[[closeButton cell] setBackgroundColor:[NSColor clearColor]];
        [[closeButton cell] setHighlightsBy:NSChangeBackgroundCellMask|NSCellLightsByContents];
        //[[closeButton cell] setHighlightsBy:NSContentsCellMask];
        //[[closeButton cell] setShowsStateBy:0|NSContentsCellMask];

Я также пробовал

[closeButton setButtonType:NSMomentaryChangeButton];

[[closeButton cell] setHighlightsBy:NSContentsCellMask];

без результатов.

Вы можете увидеть неправильное поведение на приложенных снимках экрана:

Кнопка скоса, накладывающаяся на окно HUD:Bevel button overlaying a HUD window

Неправильный фон кнопки скоса:Wrong Bevel button background

Ответы [ 4 ]

25 голосов
/ 26 февраля 2012

В зависимости от вашей ситуации это также может работать:

Измените стиль кнопки на «Скос» или «Квадрат», режим должен быть установлен на «Мгновенное изменение», а «Граница», «Прозрачный», «Смешанный» и «Выбранный» должны быть отключены. Так я исправил проблему белого фона на кнопках.

4 голосов
/ 24 февраля 2016

Я заставил его работать, установив cell.highlightsBy в ContentsCellMask:

let btn = NSButton(frame: myFrame)

btn.image = myButtonImage
btn.image?.size = myFrame.size
btn.imagePosition = .ImageOnly

btn.bordered = false      
(btn.cell as? NSButtonCell)?.highlightsBy = .ContentsCellMask

view.addSubview(btn)

Таким образом, при нажатии кнопка затемняется, но уродливый квадрат не появляется.Проверено только в Эль-Капитане).

2 голосов
/ 13 октября 2011

Создание кнопки

NSButton *myButton;
myButton = [[NSButton new] autorelease];
[myButton setTitle: @"Hello!"];
[myButton sizeToFit];
[myButton setTarget: self];
[myButton setAction: @selector (function:)];

Добавление кнопки в окно

unsigned int styleMask = NSTitledWindowMask 
                           | NSMiniaturizableWindowMask;
NSWindow *myWindow;
myWindow = [NSWindow alloc];
/*get the size of the button*/
NSSize buttonSize;
buttonSize = [myButton frame].size;
/*set window content rect with the size of the button, and with an origin of our choice; (100, 100)*/
NSRect rect;
rect = NSMakeRect (100, 100, 
                   buttonSize.width, 
                   buttonSize.height);

myWindow = [myWindow initWithContentRect: rect
                       styleMask: styleMask
                       backing: NSBackingStoreBuffered
                       defer: NO];
[myWindow setTitle: @"my window"];
/*replacing the default window content view with our button*/
[myWindow setContentView: myButton];
1 голос
/ 06 октября 2015

Вы должны установить тип кнопки: myButton.buttonType = NSMomentaryChangeButton;

...