2015-11-03 19 views
0

我有一個NSMenuItem,根據第一響應者是否響應特定的選擇器來啓用/禁用。我是否可以有條件地禁用僅在第一響應者響應選擇器時啓用的NSMenuItem?

我的問題是,有條件我在做而不是想爲第一響應者啓用項目。

但我不能只是有條件地運行期間刪除的方法定義禁用菜單項

對於我的意思的例子:
我有一個NSDocument基於應用程序,和我有兩個主要亞類ImageDocumentVideoDocument

我有一個叫做「捕獲幀」的NSMenuItem,它將視頻幀轉換爲圖像。但顯然這應該在ImageDocument上禁用,並且只能在VideoDocument上啓用。如果第一個響應者響應-captureFrame

VideoDocumentController有一個方法,-captureFrame

NSMenuItem啓用,所以它的啓用。 ImageDocumentController沒有,所以菜單項從未啓用。

但是,有特定的VideoDocument s,我不想讓該菜單項啓用。爲了處理特殊情況,禁用此菜單項的最佳方法是什麼?

回答

2

在您的VideoDocument類中,覆蓋NSDocument方法validateUserInterfaceItem:。或者,您可以覆蓋NSDocumentController的子類中的validateUserInterfaceItem:。請務必致電super以保留此方法的內置功能。示例見Apple's docs on UI validation

+0

啊好的,謝謝!你的回答實際上有點不合適,我不得不在文檔的控制器上使用'-validateMenuItem',並且當我調用'super'時我也有一個異常,所以我沒有這樣做。然後一切正常:D在標記正確之前,您可以編輯您的答案嗎? –

+0

我添加了在NSDocumentController中覆蓋的可能性。但如果它不起作用,你做錯了什麼。 NSDocumentController上的文檔甚至說你應該在覆蓋中調用'[super validateUserInterfaceItem:]''。 – JWWalker

+0

啊我看到了這個問題,我說'VideoDocumentController',沒有意識到它暗示我有'NSDocumentController'的子類。在這種情況下,我的「控制器」是顯示「VideoDocument」的「NSViewController」的子類 –

相關問題