在基于NSTableView的视图中获取NSPopUpButton行

时间:2012-10-17 12:31:01

标签: objective-c cocoa interface-builder nstableview

我有一个基于视图的表视图,其中一行包含NSPopupButtons。当用户更改popUpButton时,我需要获取包含此popUpButton的表行。

我首先希望得到

NSInteger clickedRow = [tableView rowForView: ((NSPopUpButton*) sender)];

但是,操作的发件人始终是NSMenuItem对象,而不是NSPopUpButtonNSMenuItem但不是视图,因此我无法使用rowForView

目前我的IBAction看起来像这样:

- (IBAction)changedPopUp:(id)sender {
    NSMenuItem* selectedMenuItem = ((NSMenuItem*) sender);
    NSPopUpButton* popupButton = (NSPopUpButton*)[selectedMenuItem view];
    NSInteger clickedRow = [tableView rowForView:popupButton];
    //[...]
}

但是视图属性没有自动设置,我觉得为每个NSMenuItem手动设置它非常不方便。

有没有简单的方法来获取表格行?

1 个答案:

答案 0 :(得分:1)

不要为每个NSMenuItem设置操作和目标。请改为设置NSPopupButton的操作和目标。然后,sender将成为NSPopupButton个实例,您可以使用rowForView

缺点当然是您不能对不同的菜单项执行不同的操作。