Cocoa: контекстное меню в данных исходного списка — не заголовки

Я подключил меню к табличному представлению, но проблема в том, что контекстное меню также отображается, когда я щелкаю правой кнопкой мыши заголовки в исходном списке. есть ли способ отключить это?

Поэтому, когда isLeaf возвращает false (заголовок группы), он не должен показывать меню.


person Community    schedule 15.01.2014    source источник
comment
Возможно, вам придется отключить его программно, используя [[myTableView headerView] setMenu:nil];;   -  person trojanfoe    schedule 15.01.2014
comment
@trojanfoe - спасибо, но, похоже, не работает. Все равно отображает. (я делаю это после загрузки пера)   -  person    schedule 15.01.2014


Ответы (2)


Как по мне, лучшим местом для логики меню является делегат, поэтому вы можете создать подкласс NSTableView и сделать что-то вроде этого (в этом примере есть NSOutlineView, но он не измеряется)

@protocol MYOutlineViewDelegate;

@interface MYOutlineView : NSOutlineView

@property (assign) id<MYOutlineViewDelegate> delegate;

@end

@protocol MYOutlineViewDelegate <NSOutlineViewDelegate>

- (NSMenu *)outlineView:(NSOutlineView *)outlineView menuForItem:(id)item;

@end


@implementation MYOutlineView

@dynamic delegate;

- (NSMenu *)menuForEvent:(NSEvent *)theEvent
{
    NSMenu* menu = nil;

    NSPoint clickPoint = [self convertPoint:[theEvent locationInWindow] fromView:nil];
    id item = [self itemAtRow:[self rowAtPoint:point]];

    if([self.delegate respondsToSelector:@selector(outlineView:menuForItem:)]) {
        menu = [self.delegate outlineView:self menuForItem:item];
    }

    return menu;
}

@end
person Dmitry    schedule 15.01.2014
comment
Вы случайно не знаете, как воспроизвести поведение выбора правой кнопкой мыши по умолчанию? Когда я использую selectRowIndexes, он переносит активную строку в строку, щелкнутую правой кнопкой мыши, но это не то, что по умолчанию - как в xcode, когда вы щелкаете файл правой кнопкой мыши - он получает выбор границы. Это также было по умолчанию, когда я не переопределял menuForEvent. Какие-нибудь советы? - person ; 15.01.2014

Я бы попробовал настроить себя делегатом меню и в - (void)menuNeedsUpdate:(NSMenu*)menu; убрать все пункты.

Если это не удается, просто создайте подкласс NSTableView и реализуйте - (NSMenu *)menuForEvent:(NSEvent *)event; по своему усмотрению.

person Wil Shipley    schedule 15.01.2014