我有一个基于视图的表视图,其中一行包含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];
    //[...]
}


但是view属性不是自动设置的,我发现为每个NSMenuItem手动设置它非常不便。

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

最佳答案

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

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

关于objective-c - 在基于 View 的NSTableView中获取NSPopUpButton的行,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/12934400/

10-09 16:23