NSSavePanelのaccessoryViewで置換サイズを処理するために、私が削除する必要がある(特に10.5で実行するコードがあります)という経験がありました(これをnilに設定して再追加する必要がありました)。 10.7以下(と私は10.6と信じます)、frameSizeを変更した後に[savePanel layoutIfNecessary]
と呼ぶだけで十分です。
この場合、目に見えないタブビューを使用していると言います。通常、タブビューのサイズは一定です。さまざまなサブビューの内容に基づいてNSSavePanelのサイズを変更する場合は、NSSavePanelで子ビューとして読み込むことができます(同じNIBファイルまたは他のNIBファイル内に別々のビューとして保持することができます)。
これは、NIBがプラグインモジュールのディスク上のリストから動的にロードされ、ポップアップメニューを含む単一の全体ビューを使用した後、子ビューを追加する前にそれを変更するには、-setFrameSize:
を使用します。次に、addSubview:
を使用して、既存のビューにサブビューを追加し、サイズを変更してサブビューを追加した後に[savePanel layoutIfNecessary]
を呼び出しました。ここで
は(ポップアップメニューが含まれています)当社の既存exportFormatOptionsViewビューにexportAccessoryViewControllerを(これは私たちのために、ポップアップメニューの選択に基づいて変化するものである)追加4の抜粋です:の
NSSize currentSize = [exportFormatOptionsView bounds].size;
NSView *newView = [exportAccessoryViewController view];
NSSize newSize = NSMakeSize(currentSize.width, currentSize.height+[newView bounds].size.height);
// resize the parent view
[exportFormatOptionsView setFrameSize: newSize];
// move the child view
[exportFormatOptionsView addSubview: newView];
もちろん、これらを動的に切り替えるときは、中間表示の表示サイズを元のサイズに変更して、後で補助表示を追加することができます。
NSSize currentSize = [exportFormatOptionsView bounds].size;
NSView *oldView = [exportAccessoryViewController view];
// pull it out
[oldView removeFromSuperview];
NSSize newSize = NSMakeSize(currentSize.width, currentSize.height-[oldView bounds].size.height);
[exportFormatOptionsView setFrameSize: newSize];
exportAccessoryViewController = nil;
助けてください。
xibファイルではなくコードでaccessoryViewを作成しているようです。もしそうなら、xibファイルへのアプローチを試してみてください。また、「割り当てられたメニューをテンプレートとして使用する」とはどういう意味ですか? –
いいえ、accessoryViewはメインのxibファイルにあります。 2番目のビットについては、NSSearchFieldsはNSMenuをテンプレートとして使用し、実行時にそのコピーを使用します。つまり、元のコピーではなくコピーを変更する必要があります。 –
しかし、なぜコードで-setFrameSizeを行う必要がありますか?既にxibにセットアップされていませんか? –