上下文NSMenu:如何获取属于哪个NSTableView?

时间:2015-04-08 15:41:30

标签: objective-c macos cocoa

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

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

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

-(IBAction)addRemoveItem:(id)sender

我可以从函数参数中轻松获取NSMenuItem,从而获得NSMenu。但是我怎么得到这张桌子?我无法将其设置为委托,因为我使用了具有多个表的相同菜单。

2 个答案:

答案 0 :(得分:1)

一种方法是查询每个表视图的clickedRow。具有除-1之外的值的那个是被点击的那个。

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

答案 1 :(得分:0)

1)什么是"响应者链"即响应者以什么顺序开火?

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

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

2)你有没有看过" NSView hittest"在触发操作时检查鼠标的位置......