2

ウィンドウを含むペン先(winA.xib)があります。私のアプリデリゲートには、WinAControllerと呼ばれるNSWindowControllerサブクラスが含まれています。

WinAControllerには、MainMenuをポイントするプロパティ(NSMenu * mainMenu)があります。このコードでWinAControllerをインスタンス化した後、設定しました。

    WinAController = [[WinAController alloc] initWithWindowNibName:@"WinA"];
    WinAController.mainMenu = [NSApp mainMenu];

MainMenuの「Window」トップレベルメニュー項目の下に、[WinAControllershowWindow]メソッドを呼び出してWinAを表示するメニュー項目があります。WinAが表示されているかどうかに応じて、このメニュー項目のオン/オフ状態を切り替えたい。WinAControllerには、別のプロパティ(NSMenuItem * myMenuItem)もあります。

「ウィンドウ」トップレベルメニュー項目のサブメニューへの参照を取得するにはどうすればよいですか。取得したいサブメニュー項目のタイトルは「コマンド」です。私はこれを試しました:

    if (mainMenu != nil) {
    myMenuItem = [mainMenu itemAtIndex:[mainMenu indexOfItemWithTitle:@"Command"]];
}

しかし、それは機能していないようです。

どこが間違っているのですか?

ありがとう、

編集: WinAControllerをmainMenu.xibに配置しました。WinA(winA.xib内)のファイルの所有者をクラスWinAControllerに設定しましたが、異なるペン先にあるため、WinAControllerのウィンドウIBOutletをWinAに接続する方法がわかりません。

4

2 に答える 2

5

メニュー項目への参照を直接、場合によってはメインペン先のIBOutletを介して保存できます。

または(より良いのはIMO)、そこに状態を実装-validateMenuItem:WinAControllerて設定することができます(そうすれば、状態はユーザーが実際に見るときにのみ設定されます):

- (BOOL)validateMenuItem:(NSMenuItem *)item {
    if ([item action] == @selector(showWindow:)]
        [item setState:[winA isVisible] ? NSOnState : NSOffState];

    return YES;
}
于 2010-05-19T21:35:02.913 に答える
1

ウィンドウコントローラーをMainMenu.xibに配置するように言ったと思いますか?

まあ、何も冒険せず、何も得られませんでした。もちろん、やりたいことは次のとおりです。

@interface MyApplicationDelegate : NSObject {
  IBOutlet NSMenuItem *winAMenuItem;
}

@property(assign) IBOutlet NSMenuItem *winAMenuItem;

@end

次に、これにアクセスできます[[NSApp delegate] winAMenuItem];

于 2010-05-19T21:36:07.187 に答える