作爲Cocoa的新手,我很努力地理解泛型NSResponder子類爲什麼按照他們似乎要做的方式實現關鍵事件。爲什麼NSWindow或NSView實例處理自己的關鍵事件,而不是它的委託?
在我的程序中,我有一個NSWindow子類,它佔用整個屏幕,並且必須處理關鍵事件。有幾個主要的命令可以改變整個程序的狀態(例如,當用戶點擊空格鍵時暫停一個定時器),而像NSTextField句柄這樣的子視圖是沒有意義的。
在我看來,代表(控制器)應該得到這些事件。相反,我發現我必須寫一大堆凌亂的膠水代碼才能讓窗口(通過它的keyDown:
和interpretKeyEvents:
選擇器)通知控制器,否則我必須將一堆控制器代碼移到NSWindow子類本身。
這很混亂,我的直覺告訴我我錯過了一些東西。有更清潔的解決方案嗎?
我的委託實際上是一個NSWindowController子類。我沒有使用Interface Builder,因爲我試圖創建一個在其實例化時可能無邊界的窗口,並且IB似乎不允許這樣做 - 此外,我試圖瞭解詳細信息和IB隱藏了很多,所以我認爲這個應用程序值得學習「硬道路」。 感謝您鏈接到文檔的該部分。我讀過它,但錯過了關於NSWindowController是最後一招的詳細信息。很明顯,我在管理響應者鏈上犯了一些錯誤。 – EricB 2009-06-20 21:07:17