Как добавить галочку в NSMenuItem - PullRequest
9 голосов
/ 01 февраля 2010

Как я могу поставить галочку в 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];        
}   
}

Как я могу поставить галочку для предметов?

Ответы [ 4 ]

18 голосов
/ 01 февраля 2010

Взгляните на протокол 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;
}
8 голосов
/ 05 февраля 2010

Вы хотите что-то вроде этого:

// Place a check mark next to "Circle"
NSMenuItem * theItem = [theMenu indexOfItemWithTitle: @"Circle"];
[item setState: NSOnState];

Вы бы использовали NSOffState, чтобы снять флажок.

4 голосов
/ 05 ноября 2015

Используя протокол NSMenuValidation, вы можете сделать это:

-(BOOL)validateMenuItem:(NSMenuItem *)menuItem
{
    if(menuItem.action==@selector(actionMethodForItemThatShouldBeChecked:))
    {
        menuItem.state=NSOnState;
    }

    return YES;
}
1 голос
/ 23 мая 2019

Я считаю, что NSOnState устарела (сначала устарела в macOS 10.14), вместо этого вы можете использовать NSControlStateValueOn. Пример:

[myItem setState: NSControlStateValueOn];

Для получения дополнительной информации проверьте здесь

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...