2014-09-25 24 views
1

我有一个约4个不同的NSTextField的NSPanel。我正在寻找通常的剪辑,复制,粘贴,selectAll工作的一些领域。Obj-C:为什么我的NSTextField子类对我没有分配给它的对象有影响?

我已经找到了最好的解决办法似乎是在这里: http://web.archive.org/web/20100126000339/http://www.cocoarocket.com/articles/copypaste.html

AXCVHandler成为的NSTextField的子类。在我的NSPanel的界面构建器中,如果我将一个NSTextField的类更改为AXCVHandler,如上面的链接所示,那么对我而言,预期的行为就是只有该单个文本字段允许剪切,复制和粘贴。其余3个字段不会被分配NSTextField类。

我所看到的虽然与我预期的行为相反。我为AXCVHandler设置了一个NSTextField,并且突然间,我的NSPanel上的每个NSTextField都正在使用剪切,复制和粘贴?

这是为什么?剩下的3个文本字段被分配了NSTextField类,但他们在我的子类中调用了performKeyEquivalent?!

我错过了什么?这是对firstResponder如何工作或其他方面的错误理解?

回答

0

从你的文章链接到:这个解决方案

一个有趣的事情是,处理对象并不需要为行动目标视图。如果您愿意,可以让一个NSButton执行整个窗口的复制和粘贴操作。 (这类似于一个菜单项可以为您的整个应用程序进行复制或粘贴操作的方式。)

为此要处理等效键不关心哪个图的图搜索是第一个响应。它搜索整个视图层次结构。一旦找到单个AXCVHandler,该对象执行相同的密钥。它执行的方式是向响应者链发送相应的动作,响应者链从第一响应者开始。所以,那一个AXCVHandler对象足以将适当的动作指向任何文本字段,因为它们中的任何一个都可以成为第一个响应者。

+0

有没有办法阻止这种行为,并确保这个performKeyEquiv响应只发生在分配的目标视图? – 2014-09-26 13:00:16

+0

您可以进行检查以查看所需的文本字段或所需文本字段的字段编辑器是否是第一响应者,并且仅在发送该动作时才发送该动作。如果使用'NSTextField'的子类而不是'AXCVHandler'类来实现'-performKeyEquivalent:'方法,那么这可能是最简单的。 – 2014-09-27 05:27:40

相关问题