Cómo agregar la capacidad de hacer clic derecho en una fila en un NSOutlineView para poder decir eliminar un objeto o alguna otra actividad. (es decir, como cuando hace clic derecho en una carpeta en la aplicación Apple Mail)Cómo agregar menú contextual al menú contextual de NSOutlineView (
Creo que estoy a mitad de camino, tengo una subclase de NSOutlineView que me permite hacer clic derecho y mostrar un menú contextual basado en el fila seleccionada en lugar de la fila en la que está haciendo clic el mouse.
@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
Lo siento si la respuesta es obvia. No puedo encontrar ayuda sobre esto en línea o en la documentación.
Gracias al efecto por la respuesta, que me llevó a utilizar este:
- (NSMenu *)menuForEvent:(NSEvent *)theEvent {
NSPoint pt = [self convertPoint:[theEvent locationInWindow] fromView:nil];
id item = [self itemAtRow: [self rowAtPoint:pt]];
return [self defaultMenuFor: item];
}
Sin ejecutarlo, parece que debería funcionar bien. ¿No es así? Si no, ¿qué problema tienes con eso? –
Además, no use el prefijo NS en sus propias clases. Si Apple agrega una clase NSContextOutlineView a una versión futura de Cocoa, su clase y la suya colisionarán, y probablemente su aplicación no se ejecutará. –
Creo que el problema con el código publicado es que usará la Fila seleccionada y no la fila en la que se realizó el clic derecho/ctrl. Esa puede ser o no la fila seleccionada. – VoidPointer