我有一个带有4个NSTableView的界面构建器(nib)文件。
所有这些都与上下文菜单具有相同的NSMenu(我已将每个表连接到相同的菜单组件)。
菜单中只有一个菜单项,它具有目标功能:
-(IBAction)addRemoveItem:(id)sender
我可以从函数参数中轻松获取NSMenuItem,从而获得NSMenu。但是我怎么得到这张桌子?我无法将其设置为委托,因为我使用了具有多个表的相同菜单。
答案 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"在触发操作时检查鼠标的位置......