静的および動的に作成された 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 と互換性のある方法でこれを達成するための最善の方法は何ですか?