Jak dodać zdolność do kliknięcia prawym przyciskiem myszy w wierszu w widoku NSOutlineView, aby można było powiedzieć, usunąć obiekt lub inną aktywność. (Podobnie jak po kliknięciu prawym przyciskiem myszy na folderze w aplikacji Apple Mail)Jak dodać kontekstowe menu senstive do NSOutlineView (np. Menu prawego przycisku myszy)
Myślę, że jestem w połowie drogi, mam podklasę NSOutlineView, która pozwala mi złapać prawy przycisk myszy i wyświetlić menu kontekstowe w oparciu o zaznaczonego wiersza zamiast wiersza klikniętego przez mysz.
@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
Przepraszam, jeśli odpowiedź jest oczywista. Nie mogę znaleźć pomocy w tym trybie online ani w dokumentacji.
Dzięki nieważna na odpowiedź, to prowadzi mnie do korzystania z tego:
- (NSMenu *)menuForEvent:(NSEvent *)theEvent {
NSPoint pt = [self convertPoint:[theEvent locationInWindow] fromView:nil];
id item = [self itemAtRow: [self rowAtPoint:pt]];
return [self defaultMenuFor: item];
}
Nie uruchamiając go, wygląda na to, że powinien działać poprawnie. Czy nie jest? Jeśli nie, to jaki masz problem? –
Nie należy również używać prefiksu NS na własnych klasach. Jeśli Apple doda klasę NSContextOutlineView do przyszłej wersji Cocoa, ich klasa i twoje będą się kolidować, a Twoja aplikacja prawdopodobnie nie będzie działać. –
Myślę, że problem z opublikowanym kodem polega na tym, że użyje on selectedRow, a nie wiersza, w którym wykonano prawy/ctrl-kliknięcie. To może, ale nie musi być wybrany rząd. – VoidPointer