2015-04-01 4 views

ответ

5

Системные элементы управления должны следить за тем, как выглядит Apple &, поэтому вы не можете легко изменить цвет фона. Если вы хотите выполнить это, вам нужно подклассифицировать NSButton и перезаписать метод drawRect :. Недостатком является то, что вам также потребуется обработать текстовый чертеж и, возможно, другой рендеринг на основе состояния кнопки.

Редактировать. На самом деле, вам нужно создать подкласс класса NSButtonCell для рисования материала, больше информации можно найти здесь: https://developer.apple.com/library/prerelease/mac/documentation/Cocoa/Reference/ApplicationKit/Classes/NSButtonCell_Class/index.html#//apple_ref/doc/uid/20000093-SW15

3

Кроме подклассов вы можете использовать слой подход, как этот

NSButton *button = [[NSButton alloc] initWithFrame:frame]; 
[superView addSubView:button]; 
[button setWantsLayer:YES]; 
button.layer.backgroundColor = [NSColor blueColor].CGColor; 

или вы можете сделать изображение с указанным цветом и применить это изображение к кнопке.

+1

Но теперь цвет этой кнопки не изменяется на прессе. – Shizam

3

Я бы рекомендовал против подкласса ячейки. Ячейки устарели и на выходе.

NSButton позволяет установить изображение без рамки.

Подкласс NSView или NSControl, выполняющий пользовательские процессы рисования и отслеживания событий мыши и активного приложения/активного окна для рисования всех пользовательских состояний, эффективен, если не лучше.

Клетки не знают об AutoLayout, поэтому вы должны быть осторожны, если заходите на землю.

2

Используйте фоновый слой NSButton так:

buttonName.layer.backgroundColor = NSColor.redColor.CGColor; 
+0

Это будет работать, только если вы установите кнопку прозрачной, что также приведет к потере ярлыка заголовка. –