Существует разница в том, как с помощью NSView обрабатываются управляющие и правые щелчки (как указывал jfewtr).Контекстные меню появятся для щелчка правой кнопкой мыши , если щелчок попадает в подпредставление, но не для управляющего щелчка .
Я был удивлен этим и на самом деленаписал пост об этом с более подробной информацией здесь: Причуды NSView при нажатии на клавишу управления
Существует несколько возможных решений, но переопределение / настройка всего дерева подпредставлений, вероятно, не лучший выбор.Я нашел лучшее решение для этого, чтобы явным образом отобразить ваше контекстное меню в представлении верхнего уровня (ваш подкласс NSBox) для управляющего щелчка:
- (void)mouseDown:(NSEvent *)theEvent
{
if (theEvent.modifierFlags & NSControlKeyMask)
{
[NSMenu popUpContextMenu:[self menuForEvent:theEvent] withEvent:theEvent forView:self];
}
}
Хотя жесткое кодирование такого поведения не очень хорошоэто позволяет избежать манипулирования или обхода всего дерева подпредставлений, что может вызвать более проблемные побочные эффекты / ошибки.