Имам изглед на базата на изглед с един ред, съдържащ NSPopupButtons. Когато потребителят промени popUpButton, трябва да взема реда на таблицата, в който се съдържа този popUpButton.
Първо очаквах да се сдобия с редицата
NSInteger clickedRow = [tableView rowForView: ((NSPopUpButton*) sender)];
Но подателят на действието винаги е а NSMenuItem
не обект на NSPopUpButton
. NSMenuItem
обаче не е изглед, така че не мога да го използвам rowForView
с това.
В момента моята IBAction изглежда така:
- (IBAction)changedPopUp:(id)sender {
NSMenuItem* selectedMenuItem = ((NSMenuItem*) sender);
NSPopUpButton* popupButton = (NSPopUpButton*)[selectedMenuItem view];
NSInteger clickedRow = [tableView rowForView:popupButton];
//[...]
}
Но свойството view не се задава автоматично и ми се струва доста неудобно да го задавам ръчно за всеки NSMenuItem.
Няма ли лесен начин да получите реда на таблицата?
Отговори:
0 за отговор № 1Не задавайте действие и цел за всеки NSMenuItem
, Задайте действието и целта за NSPopupButton
вместо. Тогава, sender
ще бъде NSPopupButton
например и можете да използвате rowForView
.
Недостатъкът е, разбира се, че не можете да извършвате различни действия за различни елементи от менюто.