NSPopUpButton не обновляется с изображением, когда выбран NSMenuItem
У меня есть NSPopUpButton с pullDown и я добавил несколько пунктов меню (изображение и заголовок) в меню и добавил это меню в ячейку кнопки.
Первоначально я назначаю пункт меню "Первый" меню ячейке кнопки для отображения в NSPopUpButton.
Когда я нажимаю кнопку NSPopUpButton, отображается меню со всеми элементами, которые я добавил ранее, и когда я выбираю элемент из меню, его данные не обновляются до NSPopUpButton. то есть заголовок обновляется, а изображение нет..
Может кто-нибудь предложить мне, как я могу решить эту проблему
Код, который я написал:
In ButtonCell class:
NSMenu* newMenu = [[NSMenu alloc] initWithTitle:@""];
[newMenu setAutoenablesItems:YES];
[[self optionMenuController] insertItemsInMenu:newMenu atIndex:0];
if(isFromSetOption)
{
[self setMenuItem:[newMenu itemAtIndex:1]];
isFromSetOption = NO;
}
//[newMenu insertItemWithTitle:@"dummy" action:nil keyEquivalent:@"" atIndex:0];
[self setMenu:newMenu];
[newMenu release];
In OptionMenuController :
- (void) insertItemsInMenu:(NSMenu*)menu atIndex:(NSInteger)insertIndex
{
for( NSMenuItem* item in [self createMenuItems] )
{
[menu insertItem:item atIndex:insertIndex++];
}
}
- (NSMenuItem*) menuItemForOption:(AMOptionMenuItem*)option inGroup:(AMOptionMenuItem*)group
{
NSMenuItem *menuItem = [[NSMenuItem alloc] initWithTitle:[option title] action:@selector(optionChosen:) keyEquivalent:@""];
[menuItem setIndentationLevel:1];
[menuItem setTarget:self];
[menuItem setEnabled:YES];
[menuItem setImage:[NSImage imageNamed:[option imageTitle]]];
/* if([[option identifier] isEqualToString:@"Color"])
{
[menuItem setImage:[NSImage imageNamed:@"cabinet"]];
}
else{
[menuItem setImage:[NSImage imageNamed:@"YieldIcon.png"]];
}
*/
NSString* keypath = [NSString stringWithFormat:@"%@.is%@", [group identifier], [option identifier]];
[menuItem setRepresentedObject:keypath];
NSDictionary *bindingOptions = nil;
[menuItem bind:@"value" toObject:self withKeyPath:keypath options:bindingOptions];
return [menuItem autorelease];
}