Ho una vista tabella basata su vista con una riga contenente NSPopupButtons. Quando l'utente cambia il popUpButton, ho bisogno di ottenere la riga della tabella in cui è contenuto questo popUpButton.
Prima mi aspettavo di ottenere la fila con
NSInteger clickedRow = [tableView rowForView: ((NSPopUpButton*) sender)];
Ma il mittente dell'azione è sempre a NSMenuItem
oggetto non il NSPopUpButton
. NSMenuItem
tuttavia non è una vista quindi non posso usare rowForView
con quello.
Attualmente la mia IBAction si presenta così:
- (IBAction)changedPopUp:(id)sender {
NSMenuItem* selectedMenuItem = ((NSMenuItem*) sender);
NSPopUpButton* popupButton = (NSPopUpButton*)[selectedMenuItem view];
NSInteger clickedRow = [tableView rowForView:popupButton];
//[...]
}
Ma la proprietà view non viene impostata automaticamente e trovo abbastanza scomodo impostare manualmente per ogni NSMenuItem.
Non c'è un modo semplice per ottenere la fila del tavolo?
risposte:
0 per risposta № 1Non impostare un'azione e un obiettivo per ciascuno NSMenuItem
. Imposta l'azione e il bersaglio per il NSPopupButton
anziché. Poi, sender
sarà il NSPopupButton
istanza e puoi usare rowForView
.
Lo svantaggio è ovviamente che non è possibile avere azioni diverse per voci di menu diverse.