如何在Cocoa中为一个NSView创建一个视图控制器第一响应者

时间:2010-09-17 17:16:50

标签: cocoa macos

我正在尝试为基于自定义NSOpenGLView的视图实现一个视图控制器(这是Cocoa,而不是Cocoa Touch)。

视图包含在NIB加载的窗口中,但它没有自己的NIB。实际上,窗口包含多个视图实例。

我想将鼠标事件路由到控制器而不是视图。我想在用户在相应视图中单击后立即发生这种情况。

那怎么办呢?

我已经尝试使用视图的finallyFirstResponder方法调用makeFirstResponder并将控制器作为参数。但是,这似乎不起作用,如果NSView :: becomeFirstResponder返回YES,视图仍会接收鼠标事件而不是控制器。如果它返回NO,那么我的类都不会收到鼠标事件。

当然,我可以在视图中实现鼠标事件处理方法,并将它们显式转发给控制器,但似乎应该有更好的方法来处理它。

1 个答案:

答案 0 :(得分:5)

对于一般的“第一响应者”状态,我推荐Charles Parnot的MTViewController,这是一个NSViewController子类,它使用KVO确保控制器在响应者链中而不需要你付出额外的努力。

但是,在您的情况下,您也想要鼠标事件。实际上没有办法 - 你的视图需要将鼠标事件转换为控制器交互。