如何知道哪个NSTableView打开了一个上下文菜单?

时间:2010-09-25 21:14:25

标签: cocoa nstableview appkit nsmenu nsmenuitem

我有5个具有相同上下文菜单的NSTableView实例。当我收到菜单被点击的消息时,我需要知道哪个表发送了它。我已经检查了NSMenu文档,但我似乎没有办法检查哪个表打开了菜单..

我正在考虑继承NSTableView并在menuForEvent上向委托发送消息,那会是最好的方法吗?

更新:

感谢Joshua,我正在使用5个表来显示5天的周任务计划。每个表代表一个工作日,我添加了用于添加和删除任务的上下文菜单。因此,当用户在一周工作日点击“添加任务”时,我需要知道哪一个。我通过子类化tableview并在打开菜单时向委托发送消息来实现它。通过这种方式,我的控制器知道哪个表是最后一个调用菜单的表。 但是在我看来并不是最好的实现来获得这个,也许就像你说的问题在于UI,你怎么看? 何。

1 个答案:

答案 0 :(得分:1)

我没有看到获取此信息的方法。菜单不是“附着”任何东西;它们显示在一个位置。你的-menuForEvent:override可能会起作用,但它给了我一些想法。

虽然这不是你问题的答案,但我承认我的第一个反应是“为什么你有多个表具有完全相同的菜单?”这更像是一个UI问题。人们会认为上下文菜单对于它所代表的特定事物(或其视图)非常具体。这引出了一个问题:为什么你有5个表视图都具有完全相同的上下文?如果所有5个表都表示由(可能)相同的控制器以相同方式控制的事物,则很可能有更好的方式来表示“事物集合”,而不是5个单独的表。

我做了很多假设,但是我想,但是我的好奇心正在得到我的好处。 : - )