2009-10-01 46 views
2

我必須缺少一些簡單的東西,但我看不到它。首先,設置:在視圖控制器中處理消息給第一響應者

  • DATreeView,的NSView
  • DATreeViewController一個亞類中,NSViewController
  • MainMenu.xib子類具有DATreeViewController一個實例,其被配置爲從DATreeView.xib
  • MainMenu.xib還加載的圖具有DendreaAppDelegate的實例,其具有DATreeViewController插座(其連線到MainMenu.xibDATreeViewController實例
  • Do Something!,這是一個菜單項,用於發送doSomething:消息給第一響應者。
  • 並非巧合的是,DATreeViewController有一個叫做doSomething:的動作。

我要的是爲Do Something!菜單項來觸發DATreeViewControllerdoSomething:行動,讓我們假裝我不能直接設定目標/動作連接。我會在這裏停下來問,我的設計完全錯了嗎?我想要做什麼愚蠢的/邪惡的/有可能在我的上帝眼中蒙羞?

不是?大。現在,在我的生活中,我無法使菜單項處於活動狀態。我在雪豹上做這個,如果這有什麼區別的話。

爲了實現NSViewNSViewController之間的良好整合,例如,管理響應者鏈,我遵循Matt Gallagher's example,有一個實質性的變化:在NIB加載過程中,NSView似乎沒有收到setViewController:消息,所以我自己在DATreeViewControllerloadView消息中發送該消息。響應鏈被設置爲預期從我可以告訴,在applicationDidFinishLaunching:

NSView *view = self.treeViewController.view; 
[self.window.contentView addSubview:view]; 

運行下面的代碼後,那就是:

NSWindow < NSView < DATreeViewController < DATreeView 

這是我的期望,是爲DATreeViewController是部分響應者鏈,並作爲它響應doSomething:,並且因爲它沒有實現驗證,所以我需要做的就是使用Interface Builder將Do Something!菜單項連接到First Responder代理,其中doSomething:作爲其操作,並且菜單項會自動激活。

我在做什麼錯?謝謝大家的寶貴幫助!

回答

3

您的觀點是否接受併成功成爲第一響應者?

+0

啊!由於該操作在視圖控制器中,因此我重寫了-acceptsFirstResponder。但視圖控制器不在視圖層次結構中!謝謝! – 2009-10-01 06:01:35

0

DATreeViewController是否連線到IB的DATreeView的viewController插座?

你通過setViewController:和setNextResponder:來驗證nextResponder是否設置正確?

+0

原來它比這更簡單。由於該操作在視圖控制器中,所以我重寫了-acceptsFirstResponder。但Cocoa只查看響應者的視圖層次結構,並且DAView不接受第一響應者... – 2009-10-01 06:03:52

相關問題