在NSDocument中捕获窗口事件

3
我有一个基于文档的Cocoa应用程序,其中包含一个TextView,我想捕获它上面的点击事件,所以我试图拦截窗口事件,如mouseDown,mouseUp等,然后将它们与我的TextView相关联。 我尝试了两件事情: 1. 我使TextView成为文档窗口的初始第一响应者,并在我的文档类中覆盖了mouseDown事件,但是没有生效。 2. 我子类化了NSWindow并重写了mouseDown,并将该子类设置为我的文档xib中的Window类。但是那个事件也没有生效。 我注意到Window的代理已经设置为我的File's Owner,也就是我的NSDocument子类。如果我的文档子类是窗口的代理,为什么事件不会在我的NSDocument上触发呢?
1个回答

2

不清楚为什么您希望NSDocument处理窗口中视图的-mouseDown:事件。NSDocument不响应-mouseDown:。NSTextView(顾名思义)是NSView的子类,而NSView又是NSResponder的子类,后者会响应-mouseDown:事件。

您应该仔细阅读Cocoa事件处理指南

同时也不清楚为什么您想要自己处理事件并将其传递给视图。Cocoa会为您处理所有这些内容,并且很可能做得更好。您应该澄清您的整体目标(比如,“您为什么想要拦截点击事件并自己转发它们给视图?”)——可能有更好(也很可能更容易)的方法来实现它。


谢谢。当我在IB中浏览NSTextView的接收操作时,我没有看到mouseDown,所以我认为我必须在我的窗口上处理它。我子类化了NSTextView来处理mouseDown事件,现在它的工作方式就像我期望的那样。谢谢! - Donald
欢迎。了解Cocoa的事件处理(包括响应者链和视图层次结构)绝对是值得的。如果没有这个,你将会错过整个大局中的一个巨大部分。 - Joshua Nozzi

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接