我必須缺少一些簡單的東西,但我看不到它。首先,設置:在視圖控制器中處理消息給第一響應者
DATreeView
,的NSView
DATreeViewController
一個亞類中,NSViewController
MainMenu.xib
子類具有DATreeViewController
一個實例,其被配置爲從DATreeView.xib
MainMenu.xib
還加載的圖具有DendreaAppDelegate
的實例,其具有DATreeViewController
插座(其連線到MainMenu.xib
的DATreeViewController
實例Do Something!
,這是一個菜單項,用於發送doSomething:
消息給第一響應者。- 並非巧合的是,
DATreeViewController
有一個叫做doSomething:
的動作。
我要的是爲Do Something!
菜單項來觸發DATreeViewController
的doSomething:
行動,讓我們假裝我不能直接設定目標/動作連接。我會在這裏停下來問,我的設計完全錯了嗎?我想要做什麼愚蠢的/邪惡的/有可能在我的上帝眼中蒙羞?
不是?大。現在,在我的生活中,我無法使菜單項處於活動狀態。我在雪豹上做這個,如果這有什麼區別的話。
爲了實現NSView
和NSViewController
之間的良好整合,例如,管理響應者鏈,我遵循Matt Gallagher's example,有一個實質性的變化:在NIB加載過程中,NSView
似乎沒有收到setViewController:
消息,所以我自己在DATreeViewController
的loadView
消息中發送該消息。響應鏈被設置爲預期從我可以告訴,在applicationDidFinishLaunching:
NSView *view = self.treeViewController.view;
[self.window.contentView addSubview:view];
運行下面的代碼後,那就是:
NSWindow < NSView < DATreeViewController < DATreeView
這是我的期望,是爲DATreeViewController
是部分響應者鏈,並作爲它響應doSomething:
,並且因爲它沒有實現驗證,所以我需要做的就是使用Interface Builder將Do Something!
菜單項連接到First Responder代理,其中doSomething:
作爲其操作,並且菜單項會自動激活。
我在做什麼錯?謝謝大家的寶貴幫助!
啊!由於該操作在視圖控制器中,因此我重寫了-acceptsFirstResponder。但視圖控制器不在視圖層次結構中!謝謝! – 2009-10-01 06:01:35