Ищем popUpMenuPositionItem: atLocation: inView: эквивалент 10.5 - PullRequest
1 голос
/ 05 февраля 2010

Я работаю над приложением, которое должно отображать контекстное меню на экране в различных сценариях. В функции, которую я пишу, у меня нет доступа ни к каким NSWindows или NSViews. Я хотел бы использовать popUpMenuPositionItem: atLocation: inView, так как эта функция отлично работает для меня в 10.6. Однако у нас есть требование поддержки 10.5, поэтому эта функция мне недоступна.

Функция, которая меня больше всего интересует, как указано в документации:

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

По сути, мне нужно отобразить контекстное меню с указанием местоположения на экране, но без какого-либо связанного представления.

Есть ли способ добиться этого на 10,5?

Ответы [ 2 ]

1 голос
/ 23 декабря 2010
// Set up the button cell, converting to NSView coordinates. The menu is
// positioned such that the currently selected menu item appears over the
// popup button, which is the expected Mac popup menu behavior.
NSPopUpButtonCell* button = [[NSPopUpButtonCell alloc] initTextCell:@""
                                                          pullsDown:NO];
[button autorelease];
[button setMenu:menu_];
// We use selectItemWithTag below so if the index is out-of-bounds nothing
// bad happens.
[button selectItemWithTag:index];
[button setFont:[NSFont menuFontOfSize:fontSize_]];

// Create a dummy view to associate the popup with, since the OS will use
// that view for positioning the menu.
NSView* dummyView = [[[NSView alloc] initWithFrame:bounds] autorelease];
[view addSubview:dummyView];
NSRect dummyBounds = [dummyView convertRect:bounds fromView:view];

// Display the menu, and set a flag if a menu item was chosen.
[button performClickWithFrame:dummyBounds inView:dummyView];

if ([self menuItemWasChosen])
  index_ = [button indexOfSelectedItem];

[dummyView removeFromSuperview];
0 голосов
/ 05 апреля 2010

Я не знаю, как это сделать в Какао, но вы можете использовать функцию Carbon PopUpMenuSelect.

...