如何添加在NSOutlineView中右鍵單擊某行的能力,以便您可以說刪除對象或其他活動。 (即就像當你右擊在Apple Mail應用程序的文件夾上)如何添加上下文感性菜單到NSOutlineView(即右鍵單擊菜單)
我想我走了一半,我有NSOutlineView的一個子類,讓我趕上點擊右鍵,顯示基於上下文菜單選中的行而不是鼠標點擊的行。
@implementation NSContextOutlineView
- (NSMenu *)defaultMenu {
if([self selectedRow] < 0) return nil;
NSMenu *theMenu = [[[NSMenu alloc] initWithTitle:@"Model browser context menu"] autorelease];
[theMenu insertItemWithTitle:@"Add package" action:@selector(addSite:) keyEquivalent:@"" atIndex:0];
NSString* deleteItem = [NSString stringWithFormat: @"Remove '%i'", [self selectedRow]];
[theMenu insertItemWithTitle: deleteItem action:@selector(removeSite:) keyEquivalent:@"" atIndex:1];
return theMenu;
}
- (NSMenu *)menuForEvent:(NSEvent *)theEvent {
return [self defaultMenu];
}
@end
對不起,如果答案是顯而易見的我只是不能找到任何幫助這個在線或在文檔中。
感謝void對於答案,這導致我使用這個:
- (NSMenu *)menuForEvent:(NSEvent *)theEvent {
NSPoint pt = [self convertPoint:[theEvent locationInWindow] fromView:nil];
id item = [self itemAtRow: [self rowAtPoint:pt]];
return [self defaultMenuFor: item];
}
沒有運行它,看起來它應該工作得很好。不是嗎?如果不是,你有什麼問題呢? – 2009-08-21 03:10:01
另外,不要在你自己的類上使用NS前綴。如果Apple向將來的Cocoa版本添加NSContextOutlineView類,它們的類和你的類將發生衝突,並且你的應用程序可能不會運行。 – 2009-08-21 03:10:48
我認爲發佈代碼的問題是它將使用selectedRow,而不是執行右/ ctrl單擊的行。這可能是也可能不是選定的行。 – VoidPointer 2009-08-21 16:40:24