Пользовательское представление в NSMenuItem отключает выбор NSPopUpButton

Я хочу настроить NSPopUpButton, поэтому я реализовал CustomMenuItemView, который прямо сейчас имеет только следующий код (для целей тестирования):

- (void)drawRect:(NSRect)dirtyRect
{
    [[NSColor redColor] set];
    NSRectFill(dirtyRect);
}

Теперь для каждого NSMenuItem, который я добавляю к NSMenu в myPopUpButton.menu, я устанавливаю вид в свой пользовательский вид:

NSMenuItem *menuItem = [[NSMenuItem alloc] initWithTitle:@"Some title" action:NULL keyEquivalent:@""];
menuItem.view = [[CustomMenuItemView alloc] initWithFrame:NSMakeRect(0, 0, 100, 25)];

Когда я запускаю свою программу и открываю всплывающую кнопку, выбор пункта меню кажется отключенным (т.е. ничего не происходит, когда я нажимаю на него).

Я предполагаю, что на самом деле он не отключен; он просто больше не реагирует на события. Нужно ли мне добавить некоторую обработку событий в моем пользовательском представлении? Если да, то как?


person pajevic    schedule 13.01.2012    source источник
comment
Пункт меню с представлением не отображает свой заголовок, состояние, шрифт или другие стандартные атрибуты рисования и полностью возлагает ответственность за рисование на представление. - developer.apple. com/library/mac/#documentation/Cocoa/Reference/   -  person Mazyod    schedule 16.04.2012


Ответы (1)


Я решил проблему, добавив метод mouseUp к моему CustomMenuItemView:

- (void)mouseUp:(NSEvent*) event
{
    NSMenu *menu = self.enclosingMenuItem.menu;
    [menu cancelTracking];
    [menu performActionForItemAtIndex:[menu indexOfItem:self.enclosingMenuItem]];
}
person pajevic    schedule 17.01.2012
comment
У меня такая же проблема, только несколько лет спустя. Ваше решение обрабатывает только щелчки мышью, но я также пытаюсь обрабатывать навигацию с помощью клавиатуры. Нажатие Enter/Return или пробел выбирает выделенный пункт меню и закрывает меню, но никаких действий не отправляется. Переопределение -keyUp: не работает. У вас есть идеи? - person Tricertops; 12.02.2019