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

如何在Cocoa中为NSView创建视图控制器第一响应程序,cocoa,macos,Cocoa,Macos,我正在尝试为基于NSOpenGLView的自定义视图实现一个视图控制器这是Cocoa,不是Cocoa Touch 视图包含在NIB加载的窗口中,但它没有自己的NIB。事实上,该窗口包含该视图的多个实例 我想将鼠标事件路由到控制器,而不是视图。我希望在用户在相应视图中单击时立即执行此操作 那么如何做到这一点呢 我已经尝试使用控制器作为参数调用视图的becomeFirstResponder方法makeFirstResponder。但是,这似乎不起作用,如果NSView::becomeFirstRes

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

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

我想将鼠标事件路由到控制器,而不是视图。我希望在用户在相应视图中单击时立即执行此操作

那么如何做到这一点呢

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


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

对于一般的第一响应者状态,我推荐Charles Parnot,NSViewController子类,它使用KVO确保控制器位于响应程序链中,而无需您付出额外的努力


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

对于一般的第一响应者状态,我推荐Charles Parnot's,它是一个NSViewController子类,使用KVO确保控制器在响应者链中,而无需您付出额外的努力


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

好的,我希望Cocoa提供一种机制来将事件发送到控制器。您的意思是像目标/动作模式或委托模式一样?视图处理鼠标事件。考虑一个按钮:它需要一个目标和一个动作选择器。通常,目标是某个控制器的实例,操作是该控制器的选择器。您的视图应该以大致相同的方式运行。不适用于Cocoa中的鼠标事件。您的视图NSResponder->NSView->NSControl或其他一些子类除了显示当前状态外,还将鼠标交互转换为发送到控制器的谨慎用户操作。对于一个更复杂的例子,考虑nStabdVIEW的数据协议的使用。还考虑了来自苹果的草图示例项目。在典型的可可MVC设计中,当用户通过视图对象输入值或指示选择时,该值或选择被传递给控制器对象。控制器对象可能以某种特定于应用程序的方式解释用户输入。。。从OK开始,我希望Cocoa提供了一种将事件发送到控制器的机制。你的意思是像target/action模式或delegate模式一样?视图处理鼠标事件。考虑一个按钮:它需要一个目标和一个动作选择器。通常,目标是某个控制器的实例,操作是该控制器的选择器。您的视图应该以大致相同的方式运行。不适用于Cocoa中的鼠标事件。您的视图NSResponder->NSView->NSControl或其他一些子类除了显示当前状态外,还将鼠标交互转换为发送到控制器的谨慎用户操作。对于一个更复杂的例子,考虑nStabdVIEW的数据协议的使用。还考虑了来自苹果的草图示例项目。在典型的可可MVC设计中,当用户通过视图对象输入值或指示选择时,该值或选择被传递给控制器对象。控制器对象可能以某种特定于应用程序的方式解释用户输入。。。从…起