2015-09-25 22 views
4

所以這是我的設置:無視片用單個文本字段的快捷鍵

一個不重要NSWindow與單個NSTextField用戶進入加一個「接受」型NSButton

顯示窗口在我的文檔窗口,利用片beginSheetModalForWindow:completionHandler:

我想,當用戶按下Esc鍵來關閉表,但我得到的是有趣的系統聲音告訴我,這不真的期待在這一點上逃脫的關鍵。

有幾個類似的問題提示我們應該檢查cancelOperation響應鏈中的某個地方。事情是,當我在調試器中檢查它時,我的窗口控制器(用於表單中的窗口/對話框)甚至不在響應器鏈中。

對於以上述方式顯示的表單,響應者鏈仍然是關於我的文檔窗口。奇怪的。

因此,任何提示如何正確連接到cancelOperation或退出鍵將非常感激!

+0

您是否在調試器中嘗試並查看cancelOperation:或甚至keyDown:方法是否在您的NSResponder子類(例如您的視圖控制器/窗口控制器)中命中? – cacau

回答

3

由於您的工作表可以被取消,所以您可能需要在其上添加一個取消按鈕,以便使用戶清楚這一可能性。如果你這樣做,並將該取消按鈕的鍵盤快捷鍵設置爲IB中的退出鍵,那麼它應該只是工作。不過,我認爲按鈕的名稱實際上是「取消」是很重要的;我記得讀到AppKit基於該按鈕名稱在幕後做了一些特殊的膠水魔術。

順便說一句,你的窗口控制器似乎應該在響應者鏈中,假設它是以正確的方式設置的實際NSWindowController;請參閱Apple的文檔here。不知道爲什麼調試器表明它不是,但應該是,據我所知。如果確實不是這樣,那可能表明您設置表單的方式更加錯誤。但我不確定,因爲我自己沒有嘗試過。

+0

我想這個問題不是關於如何掛鉤取消按鈕,但如何處理這個設置中的一般逃生鍵 – ATV

+0

我的觀點是,我相信,AppKit具有特殊處理代碼,用於換單內部的轉義鍵,以及使用「取消」按鈕 - 除了在面板事實上可取消的情況下進行良好的用戶界面設計外 - 還可免費獲得該特殊處理代碼的好處。與現在一起游泳,而不是反對它。 – bhaller

+0

@SteveM,在我看來,我已經回答了你的問題。如果是這樣,請接受答案。如果沒有,請澄清爲什麼不。 – bhaller