Настройка NSButtonCell с изображениями и подсветкой
Я хочу создать пользовательский переключатель для моего приложения, в котором я предоставляю три изображения для возможных состояний (on, off, mousedown). Весь внешний вид содержится в изображениях, поэтому я не хочу, чтобы Cocoa выделял (затемнял) кнопку сам по себе во время mousedown.
на данный момент я создал подкласс NSButtonCell, перетащил кнопку скоса NSButtonTypeMomentaryChange в мое представление и настроил тип класса ячейки кнопки на мой подкласс. Подкласс просто реализует awakeFromNib, чтобы попытаться установить желаемое поведение:
- (void)awakeFromNib
{
[self setShowsStateBy:NSContentsCellMask];
[self setHighlightsBy:NSContentsCellMask];
}
который, как я думал (согласно документации), отключит затемнение кнопки mousedown. Это не так.
вот где я стою, и теперь у меня есть два вопроса:
- как я могу установить класс ButtonCell, чтобы просто показать мою подготовленную картину на mousedown и не затемнять / рисовать границы вокруг кнопки?
- что было бы самым чистым / самым правильным способом реализовать другое поведение коммутатора, т. е. показывать положение off / on в зависимости от предыдущего состояния и иметь возможность правильно передавать свое состояние другим объектам?
1 ответов
Установите тип кнопки в On / Off. Подкласс его ячейки. Напишите это двумя способами:
- (void)drawWithFrame:(NSRect)cellFrame inView:(NSView *)controlView
{
if ([self state])
{
[onStateImage drawInRect:cellFrame fromRect:NSZeroRect operation:NSCompositeSourceOver fraction:1.0];
}
else
{
[offStateImage drawInRect:cellFrame fromRect:NSZeroRect operation:NSCompositeSourceOver fraction:1.0];
}
}
- (void)highlight:(BOOL)flag withFrame:(NSRect)cellFrame inView:(NSView *)controlView
{
if (flag){
[downStateImage drawInRect:cellFrame fromRect:NSZeroRect operation:NSCompositeSourceOver fraction:1.0];
}
}