【问题标题】:Context NSMenu: how to get the NSTableView to which belongs to?Context NSMenu:如何获取所属的NSTableView?
【发布时间】:2015-04-09 00:10:34
【问题描述】:

我有一个带有 4 个 NSTableView 的界面构建器 (nib) 文件。

它们都具有与上下文菜单相同的 NSMenu(我已将每个表连接到相同的菜单组件)。

菜单内只有一个菜单项,它具有目标功能:

-(IBAction)addRemoveItem:(id)sender

我可以很容易地从函数参数中得到 NSMenuItem,因此得到 NSMenu。但是我怎么拿到桌子呢?我无法将其设置为委托,因为我使用的是包含多个表的同一菜单。

【问题讨论】:

    标签: objective-c macos cocoa


    【解决方案1】:

    一种方法是查询每个表视图的clickedRow。值不是-1的那个是被点击的那个。

    另一种方法可能是为每个表视图使用NSTableView 的自定义子类。在您的自定义子类中,覆盖 -menuForEvent:。打电话给超级。如果返回一个菜单,则向其他对象报告此表正在显示上下文菜单,然后返回该菜单。您可以扩展委托协议来进行报告,也可以发布通知。

    【讨论】:

    • 第一种方法:[resultOutlineView clickedRow] 总是-1,因为当我点击菜单项时,我不再点击表格了
    【解决方案2】:

    1) 什么是“响应者链”,即响应者以什么顺序触发?

    someTopView (does not accept first responder)->anotherView(handles responder).

    n.b.一个经典的例子,如果你在 NSView 中放置一个 NSControl。尽管 NSControl 继承自 NSView,但它会处理第一响应者,即当您单击它时,它会处理它而不是它下面的视图。

    2) 您是否查看过“NSView hittest”,它会在触发操作时检查鼠标的位置...

    【讨论】:

    猜你喜欢
    • 2016-08-01
    • 2012-04-08
    • 1970-01-01
    • 2020-09-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-07-01
    • 2011-10-03
    相关资源
    最近更新 更多