2014-01-15 5 views
0

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

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

+0

Вам может понадобиться отключите его программно, используя '[[myTableView headerView] setMenu: nil];'; – trojanfoe

+0

@trojanfoe - спасибо, но, похоже, не работает. Все еще отображается. (я делаю это после загрузки nib) – Wesley

ответ

0

Как для меня лучшее место для логики меню является делегатом, так что вы можете создать подкласс 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 
+0

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

1

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

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

Смежные вопросы