Как для меня лучшее место для логики меню является делегатом, так что вы можете создать подкласс 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
Вам может понадобиться отключите его программно, используя '[[myTableView headerView] setMenu: nil];'; – trojanfoe
@trojanfoe - спасибо, но, похоже, не работает. Все еще отображается. (я делаю это после загрузки nib) – Wesley