2014-09-25 18 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

相關問題