Как я могу добавить пункты меню в контекстное меню NSTextField - PullRequest
1 голос
/ 24 августа 2010

Я пытался переписать простой метод NSView:

- (NSMenu *)menuForEvent:(NSEvent *)event {
   NSMenu* result = [super menuForEvent: event];
   NSMenuItem* mi = [[NSMenuItem alloc] initWithTitle: @"Foobar" action: @selector(foobar) keyEquivalent: @""];
   [result addItem: mi];    
   return result;
}

, но он не работает.Это никогда не называется.

Ответы [ 3 ]

4 голосов
/ 31 декабря 2013

Попробуйте использовать протокол NSTextViewDelegate

- (NSMenu *)textView:(NSTextView *)view menu:(NSMenu *)menu forEvent:(NSEvent *)event atIndex:(NSUInteger)charIndex

После этого редактор поля окна запросит у вашего NSTextField меню

0 голосов
/ 11 июня 2014

Спасибо за других, указывающих путь. Я не смог заставить редактор поля по умолчанию окна использовать любые методы делегата. Наконец, я поместил в свой метод делегата -windowDidLoad следующее выражение

NSTextView* defaultFieldEditor = [self.window fieldEditor:YES forObject:nil];
//  defaultEditor.delegate = self; didn't help
NSMenu *mu = defaultEditor.menu;
[mu insertItem:[NSMenuItem separatorItem] atIndex:0];
[mu insertItemWithTitle:@"Insert Line"
                 action:@selector(acnInsertLine:)
          keyEquivalent:@"" atIndex:0];
 [mu insertItemWithTitle:@"Delete Line"
                  action:@selector(acnDeleteLine:)
           keyEquivalent:@"" atIndex:0];

Предполагается, что элементы будут помещаться в начале (в обратном порядке). Вы можете использовать addItem: вместо этого. Оба страдают от проблемы, заключающейся в том, что содержимое меню меняется, и ваши пункты, вероятно, где-то посередине.

Обратите внимание, что редактор полей является NSTextView, даже если элемент управления, который он покрывает, является NSTextField. Это вызвало у меня некоторое недоумение.

0 голосов
/ 24 августа 2010

Если текстовое поле имеет фокус, я считаю, что меню, которое вы получаете, на самом деле - это меню Field Editor .Возможно спросите это для его меню.

...