Tengo una vista de tabla basada en vista con una fila que contiene NSPopupButtons. Cuando el usuario cambia el popUpButton, necesito obtener la fila de la tabla en la que está contenido este popUpButton.
Primero esperaba obtener la fila con
NSInteger clickedRow = [tableView rowForView: ((NSPopUpButton*) sender)];
Pero el remitente de la acción siempre es un NSMenuItem
objeto no el NSPopUpButton
. NSMenuItem
Sin embargo, no es una vista, así que no puedo usar rowForView
con ese.
Actualmente mi IBAction se ve así:
- (IBAction)changedPopUp:(id)sender {
NSMenuItem* selectedMenuItem = ((NSMenuItem*) sender);
NSPopUpButton* popupButton = (NSPopUpButton*)[selectedMenuItem view];
NSInteger clickedRow = [tableView rowForView:popupButton];
//[...]
}
Pero la propiedad de vista no se configura automáticamente y me resulta bastante incómodo configurarlo manualmente para cada elemento de menú de seguridad.
¿No hay una manera fácil de obtener la fila de la tabla?
Respuestas
0 para la respuesta № 1No establezca una acción y un objetivo para cada uno. NSMenuItem
. Establecer la acción y el objetivo para el NSPopupButton
en lugar. Entonces, sender
será el NSPopupButton
instancia y puede utilizar rowForView
.
El inconveniente es, por supuesto, que no puede tener diferentes acciones para diferentes elementos del menú.