Cocoa 在NSDocument中捕获窗口事件

Cocoa 在NSDocument中捕获窗口事件,cocoa,events,window,nsdocument,Cocoa,Events,Window,Nsdocument,我有一个基于文档的Cocoa应用程序,它带有一个TextView,我想捕获对它的点击,所以我尝试截取窗口事件,如mouseDown、mouseUp等,然后将它们与我的TextView关联 我试过两种方法: 1.)我让TextView成为我文档窗口的第一个响应程序,并在我的文档类上覆盖mouseDown事件,但它没有命中 2.)我将NSWindow子类化并覆盖mouseDown,并在文档xib中将该子类设置为窗口的类。那件事也没有成功 我注意到窗口的委托已经设置为文件的所有者,这是我的NSDocu

我有一个基于文档的Cocoa应用程序,它带有一个TextView,我想捕获对它的点击,所以我尝试截取窗口事件,如mouseDown、mouseUp等,然后将它们与我的TextView关联

我试过两种方法:

1.)我让TextView成为我文档窗口的第一个响应程序,并在我的文档类上覆盖mouseDown事件,但它没有命中

2.)我将NSWindow子类化并覆盖mouseDown,并在文档xib中将该子类设置为窗口的类。那件事也没有成功


我注意到窗口的委托已经设置为文件的所有者,这是我的NSDocument子类。如果my document子类是my Window的委托,为什么不在my NSDocument上触发事件?

不清楚为什么希望NSDocument处理窗口中视图的-mouseDown:events。NSDocument未响应-mouseDown:。NSTextView(顾名思义)是NSView的一个子类,NSView是NSResponder的一个子类,它响应-mouseDown:

你应该好好读一读这本书


还不清楚您为什么要处理这些事件并将其传递给自己的视图。Cocoa会为你处理好所有这些东西,而且可能会做得更好。你应该明确你的总体目标(如“为什么你想拦截点击并将其转发给自己的视图?”)-可能有更好(可能更容易)的方法来实现它。

谢谢。当我在IB中浏览NSTextView收到的操作时,我没有看到mouseDown,所以我认为我必须在我的窗口中处理它。我将NSTextView子类化以处理mouseDown事件,它的工作方式与我预期的一样。谢谢欢迎理解Cocoa的事件处理(包括响应者链和视图层次结构)绝对值得。没有这一点,你将错过大局的一大块。