Eu tenho um modo de exibição de tabela com base em uma linha que contém NSPopupButtons. Quando o usuário altera o popUpButton, preciso obter a linha da tabela na qual esse popUpButton está contido.
Eu primeiro esperava começar a briga com
NSInteger clickedRow = [tableView rowForView: ((NSPopUpButton*) sender)];
Mas o remetente da ação sempre é um NSMenuItem
objeto não o NSPopUpButton
. NSMenuItem
no entanto, não é uma visão, então não posso usar rowForView
com isso.
Atualmente, meu IBAction se parece com isso:
- (IBAction)changedPopUp:(id)sender {
NSMenuItem* selectedMenuItem = ((NSMenuItem*) sender);
NSPopUpButton* popupButton = (NSPopUpButton*)[selectedMenuItem view];
NSInteger clickedRow = [tableView rowForView:popupButton];
//[...]
}
Mas a propriedade view não é definida automaticamente e acho bastante inconveniente configurá-la manualmente para todos os NSMenuItem.
Não existe uma maneira fácil de obter a linha da tabela?
Respostas:
0 para resposta № 1Não defina uma ação e um alvo para cada NSMenuItem
. Defina a ação e o destino para o NSPopupButton
em vez de. Então, sender
será o NSPopupButton
instância e você pode usar rowForView
.
A desvantagem é obviamente que você não pode ter ações diferentes para diferentes itens de menu.