【问题标题】:How to know which NSTableView opened a Contextual Menu?如何知道哪个 NSTableView 打开了上下文菜单?
【发布时间】:2010-09-25 21:14:24
【问题描述】:

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

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

更新:

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

【问题讨论】:

    标签: cocoa nstableview appkit nsmenu nsmenuitem


    【解决方案1】:

    我没有找到获取此信息的方法。菜单不会“附加”到任何东西上;它们显示在某个位置。您的 -menuForEvent: 覆盖可能会起作用,但它给了我勇气。

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

    我做了很多假设,这是理所当然的,但我想我的好奇心越来越强了。 :-)

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-05-10
      • 2013-08-03
      • 1970-01-01
      • 1970-01-01
      • 2018-02-26
      • 1970-01-01
      • 1970-01-01
      • 2011-12-13
      相关资源
      最近更新 更多