Я хотел бы создать элемент состояния с вертикальным ползунком в нем, очень похоже на управление звуком, предоставляемое Apple. У меня вопрос: как мне заставить его реагировать на клавиши со стрелками вверх / вниз, как ползунок в меню звука?
Я попытался создать подкласс NSSlider, который бы увеличивал / уменьшал свое значение при нажатии клавиш (см. Ниже), но мне нужно сделать его первым респондентом. Чтобы сделать его первым респондентом, я сделал основной класс делегатом этого меню и добавил этот метод:
- (void)menuWillOpen: (NSMenu*)menu
{
if (menu == statusBarMenu) {
[THE_WINDOW_THAT_CONTAINS_THE_SLIDER makeFirstResponder: slider];
}
В какое окно мне звонить? Должен ли я сделать это по-другому? Как бы вы это сделали?
Подкласс слайдера:
#import <AppKit/AppKit.h>
@interface KeyRespondingSlider : NSSlider
@end
@implementation KeyRespondingSlider
- (BOOL)canBecomeKeyView
{
return YES;
}
- (BOOL)acceptsFirstResponder
{
return YES;
}
- (void)keyDown: (NSEvent*)theEvent
{
unsigned short keyCode = [theEvent keyCode];
if (keyCode == 126) { // up-arrow
[self setDoubleValue: [self doubleValue] + kChange];
}
else if (keyCode == 125) { // down-arrow
[self setDoubleValue: [self doubleValue] - kChange];
}
}
@end
Я проверил это, и оно работает, когда это первый респондент с нормальным NSWindow. Я просто не могу сделать это с помощью меню в строке состояния.