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

tgf*_*ynn 1 macos cocoa

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

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

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

那么怎么做呢?

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

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

Jos*_*zzi 5

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

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