単純なものが欠けているに違いありませんが、見えません。まず、セットアップ:
DATreeView
、のサブクラスNSView
DATreeViewController
、のサブクラスNSViewController
MainMenu.xib
DATreeViewController
からビューをロードするように構成された のインスタンスがありますDATreeView.xib
MainMenu.xib
のインスタンスもありDendreaAppDelegate
、アウトレットがあります (のインスタンスDATreeViewController
に配線されています) 。MainMenu.xib
DATreeViewController
Do Something!
doSomething:
、ファーストレスポンダにメッセージを送信するために接続されたメニュー項目です。- 偶然で
DATreeViewController
はなく、 というアクションがありdoSomething:
ます。
私が望むのは、Do Something!
メニュー項目が でdoSomething:
アクションをトリガーするDATreeViewController
ことです。ターゲット/アクション接続を直接設定することはできないふりをしましょう。ここで立ち止まって質問します。私の設計は完全に間違っていますか? 私がやろうとしていることは、私の神の目に愚か/悪/恥をかかせる可能性がありますか?
いいえ?偉大な。さて、私の人生では、メニュー項目をアクティブにすることはできません。違いがある場合は、Snow Leopardでこれを行っています。
NSView
との間の適切な統合を実現するためにNSViewController
、たとえばレスポンダー チェーンの管理など、 Matt Gallagher の例に従いましたが、実質的な変更が 1 つ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:
アクションとして使用すると、メニュー項目が自動的にアクティブになります。
私は何を間違っていますか?かけがえのない支援をありがとうございました!