2012-03-03 13 views
1

NSSavePanelには、フォーマットポップアップメニューを含むアクセサリビューと、選択したフォーマットに関するさまざまなオプションのタブレスタブビューがあります。パネルに正しく表示されますが、サイズを調整できないようです。NSSavePanelのaccessoryViewを操作しますか?

アクセサリビューで-setFrameSizeを呼び出すと、奇数および奇数のサイズ変更が1回発生し、その後の呼び出しで応答がありません。ビュー内の他のコントロールは、すべての呼び出しにまったく応答しません。

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

+0

xibファイルではなくコードでaccessoryViewを作成しているようです。もしそうなら、xibファイルへのアプローチを試してみてください。また、「割り当てられたメニューをテンプレートとして使用する」とはどういう意味ですか? –

+0

いいえ、accessoryViewはメインのxibファイルにあります。 2番目のビットについては、NSSearchFieldsはNSMenuをテンプレートとして使用し、実行時にそのコピーを使用します。つまり、元のコピーではなくコピーを変更する必要があります。 –

+0

しかし、なぜコードで-setFrameSizeを行う必要がありますか?既にxibにセットアップされていませんか? –

答えて

1

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; 

助けてください。

関連する問題