/ / Obter linha do NSPopUpButton no NSTableView baseado em visualização - objetivo-c, cacau, construtor de interface, nstableview

Obter linha de NSPopUpButton na visualização com base em NSTableView - objective-c, cacau, interface-builder, nstableview

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 № 1

Nã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.