2012-01-13 2 views
2

Я хочу, чтобы настроить УД NSPopUpButton, так что я Реализован CustomMenuItemView, который сейчас только имеет следующий код (для тестирования):режим просмотра в NSMenuItem отключает выбор NSPopUpButton

- (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)]; 

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

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

+1

«Пункт меню с целью не сделать его заголовок, состояние, шрифт или другие стандартные атрибуты рисования, и присваивает рисунок ответственности полностью к мнению ». - https://developer.apple.com/library/mac/#documentation/Cocoa/Reference/ApplicationKit/Classes/NSMenuItem_Class/Reference/Reference.html – Mazyod

ответ

7

Я решил эту проблему путем добавления метода mouseUp к моей CustomMenuItemView:

- (void)mouseUp:(NSEvent*) event 
{ 
    NSMenu *menu = self.enclosingMenuItem.menu; 
    [menu cancelTracking]; 
    [menu performActionForItemAtIndex:[menu indexOfItem:self.enclosingMenuItem]]; 
}