2

フォーマットポップアップメニューを含むアクセサリビューと、選択したフォーマットに関するさまざまなオプションを備えたテーブルタブビューを使用して NSSavePanel をセットアップしました。パネルには正しく表示されますが、サイズを調整できないようです。

accessoriesView で -setFrameSize を呼び出すと、奇妙で​​不適切なサイズ変更が 1 回発生し、その後の呼び出しに対する応答がありません。ビュー内の他のコントロールは、すべての呼び出しに応答することを完全に拒否します。

NSSavePanel は、割り当てられたメニューのみをテンプレートとして使用する NSSearchField のように機能しますか? その場合、現在アクティブな保存パネルでアクセサリ ビューの特定のインスタンスを操作するにはどうすればよいですか?

4

1 に答える 1

1

私の経験では (特に 10.5 で実行する必要があるコードの場合)、NSSavePanel のアクセサリビューでサイズの並べ替えを処理するために、削除 (nil に設定) してから再度追加する必要がありました。10.7 (そして、10.6 だと思います) では[savePanel layoutIfNecessary]、frameSize を変更した後に呼び出すだけで十分なようです。

この場合、非表示のタブ ビューを使用していると述べているためです。通常、タブ ビューのサイズは一定です。さまざまなサブビューの内容に基づいて NSSavePanel のサイズを変更する場合は、それらを (同じまたは他の NIB ファイル内の) 別のビューとして保持し、NSSavePanel の子ビューとしてロードすることができます。

NIB がプラグイン モジュールのディスク上のリストから動的にロードされた状況で、これを正常に実行しました。ここでは、ポップアップ メニューを含む単一の全体ビューを使用-setFrameSize:し、変更するために使用してそのビューのサイズを変更しました。子ビューを追加する前に。次にaddSubview:、既存のビューにサブビューを追加し[savePanel layoutIfNeeded]、サイズを変更してサブビューを追加した後に呼び出しました。

これは、既存の 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;

お役に立てれば。

于 2012-03-03T21:26:32.450 に答える