В контекстном меню, как я могу дать NSMenuItem галочку? Я хочу поместить его рядом с определенными объектами. Я создаю меню в mouseDown:
функция, как показано ниже:
-(void)mouseDown:(NSEvent *)event
{
NSPoint pointInView = [self convertPoint:[event locationInWindow] fromView:nil];
if (NSPointInRect(pointInView, [self shapeRect]) )
{
NSMenu *theMenu = [[[NSMenu alloc] initWithTitle:@"default Contextual Menu"] autorelease];
[theMenu insertItemWithTitle:@"Circle" action:@selector(circle:) keyEquivalent:@"" atIndex:0];
[theMenu insertItemWithTitle:@"Rectangle" action:@selector(rectangle:) keyEquivalent:@"" atIndex:1];
[NSMenu popUpContextMenu:theMenu withEvent:event forView:self];
}
}
Как я могу дать объектам галочку?
Взгляните на протокол NSUserInterfaceItemValidations
. При отображении меню он запросит каждого респондента в цепочке ответа методом validateUserInterfaceItem:
, чтобы определить, должен ли этот элемент быть включен. (Элемент будет включен до тех пор, пока один из респондентов в цепочке возвращает YES
). Это также дает вам возможность настроить элемент. Например:
- (BOOL)validateUserInterfaceItem:(id <NSValidatedUserInterfaceItem>)item {
if ([item action] == @selector(actionMethodForItemThatShouldBeChecked:)] {
// This method is also used for toolbar items, so it's a good idea to
// make sure you're validating a menu item here
if ([item respondsToSelector:@selector(setState:)])
[item setState:NSOnState];
}
return YES;
}
Вы хотите что-то вроде этого:
// Place a check mark next to "Circle"
NSMenuItem * theItem = [theMenu indexOfItemWithTitle: @"Circle"];
[item setState: NSOnState];
Вы бы использовали NSOffState для удаления галочки.