Мне нужно создать меню для выбранной строки таблицы, я могу создать путем переопределенияNSMenu -> Добавление SubMenu -> получить выберите событие
-(NSMenu*)menuForEvent:(NSEvent*)evt
метод, таблицы, В этом конкретном Меню есть два подменю, я могу сделать Подменю , но сталкивается с этой проблемой.
1 - Чтобы добавить подменю в MenuItem, мне нужно получить подменю из другого класс/Интерфейс, я вызываю следующий метод
pSubMenu = [CommonUIUtil GetCommonUIMenu:pSubMenu
ActionId:self
Selector:@selector(MyMenuAction)];
Где прототип этой функции, как следовать
+(NSMenu *)GetCommonStatusMenu:(NSMenu *)pMenu ActionId:(NSObject*)aDelegate Selector:(SEL)selector
реализации, как показано ниже,
// pStrArray is Array of String to have the Menu Title
for(int idx =0;idx<[pStrArray count];idx++)
{
pTempStr = [pStrArray objectAtIndex:idx];
pImage = [CommUIController CommonGetImage:[CommonUIUtil GetImageByStatus:pTempStr]];
[pImage setSize:NSMakeSize(20,20)];
pMenuItem =[[NSMenuItem alloc]init];
[pMenuItem setTitle:pTempStr];
// this should set the selector
[pMenuItem setAction:selector];
// Setting the target
[pMenuItem setTarget:aDelegate];
[pMenuItem setImage:pImage];
[pMenuItem setEnabled:YES];
[pMenu addItem:pMenuItem];
[pMenuItem release];
}
return pMenu;
Я могу видеть изображение, строки на этом Суб меню, но проблема я облицовкой это меню вообще не включено. Может ли кто-нибудь направить меня, где я делаю ошибку,
Эта функция вернет меню и меню, которые я добавлю, как показано ниже,
pMenuItem = [pCTTableMenu itemWithTitle:@"Status"];
//status menu is the menu returned from the above function,
[pMainMenu setSubmenu:pStatusMenu forItem:pMenuItem];
Заранее спасибо :)
Вы уверены, что ваш делегат реализует метод MyMenuAction, который не принимает никаких параметров? Часто методы действий принимают параметр отправителя, но ваш селектор не будет соответствовать такому действию (потому что в конце нет двоеточия). Btw, методы именования с префиксом «get» считаются плохим стилем в Cocoa (с некоторыми, очень специфическими исключениями), а имена методов обычно начинаются с строчной буквы. – omz
Привет, похоже, я не передаю метод селектора правильно, на самом деле я не знаю, как передать указатель функции в Cocoa, возможно, я смешиваю Cocoa/Objective C и Normal C оба :), исправлено, оно, в метод, просто создающий представление и в главном классе/интерфейсе, назначающем цель и действие – Amitg2k12