我正在尝试为基于自定义NSOpenGLView的视图实现一个视图控制器(这是Cocoa,而不是Cocoa Touch)。
视图包含在NIB加载的窗口中,但它没有自己的NIB。实际上,窗口包含多个视图实例。
我想将鼠标事件路由到控制器而不是视图。我想在用户在相应视图中单击后立即发生这种情况。
那怎么办呢?
我已经尝试使用视图的finallyFirstResponder方法调用makeFirstResponder并将控制器作为参数。但是,这似乎不起作用,如果NSView :: becomeFirstResponder返回YES,视图仍会接收鼠标事件而不是控制器。如果它返回NO,那么我的类都不会收到鼠标事件。
当然,我可以在视图中实现鼠标事件处理方法,并将它们显式转发给控制器,但似乎应该有更好的方法来处理它。
答案 0 :(得分:5)
对于一般的“第一响应者”状态,我推荐Charles Parnot的MTViewController,这是一个NSViewController子类,它使用KVO确保控制器在响应者链中而不需要你付出额外的努力。
但是,在您的情况下,您也想要鼠标事件。实际上没有办法 - 你的视图需要将鼠标事件转换为控制器交互。