0

静的および動的に作成された NSMenuItem の両方を含む NSMenu があります (静的は Interface Builder で作成された NSMenuItem を意味し、動的は実行時に作成された NSMenuItem を意味します)。私は 10.6 で開発していますが、私のアプリケーションは 10.5 もサポートしています。

私のメニューは、サブメニューを含む多数の動的 NSMenuItem で構成されています。現在、NSMenuItem の parentItem: メソッド (10.6 専用) を使用して、サブメニュー項目がクリックされたときに親メニュー項目を取得しています。

編集:これは、手動のparentItem:メソッドを作成するための大雑把な試みですが、特に直感的ではありません。確かにもっと良い方法がありますか?

- (NSMenuItem *)findParentByChild:(NSMenuItem *)child {
    for(int x = 0; x < [statusBarMenu numberOfItems]; x++) {
        // Avoid any statically created menu items
        if([[statusBarMenu itemAtIndex:x] tag] != 100) {
            NSMenu *submenu = [[statusBarMenu itemAtIndex:x] submenu];
            if(submenu != nil) {
                for(int y = 0; y < [submenu numberOfItems]; y++) {
                    // This looks like our parent
                    if([submenu itemAtIndex:y] == child) {
                        return [statusBarMenu itemAtIndex:x];
                    }
                }
            }
        }
    }
    return nil;
}

10.5 および 10.6 と互換性のある方法でこれを達成するための最善の方法は何ですか?

4

1 に答える 1

2

あなたは救われました: -menuNeedsUpdate:は 10.3 から利用可能です。:-)

Mac OS X v10.3 以降で利用できます。Mac OS X v10.6 より前の非公式プロトコルの一部として利用できます。

10.5/10.6 を対象とするアプリケーションで頻繁に使用しています。

注:この回答は、-menuNeedsUpdate の可用性に関する以前のバージョンの質問に関連しています。

于 2010-08-03T14:58:19.650 に答える