2

私はNSOpenPanel付属品のビューを持っています。アクセサリ ビューはシンプルです。チェックボックスをオンにすると、ユーザーは任意のファイルを選択できます。チェックを外すと、サポートされている拡張子のリストにファイルが含まれている必要があります。

NSOpenPanel初期化と表示:

NSOpenPanel* dialog = [NSOpenPanel openPanel];

[dialog setAllowedFileTypes:allowedFileTypes];
[dialog setAccessoryView:openPanelAccessoryView];

openPanel = dialog;

[dialog beginSheetModalForWindow:[self activeWindow]
               completionHandler:^(NSInteger result)
 {
     ...
 }];

IBActionチェックボックスの場合:

- (void)openUnrecognizedFiles:(id)sender
{
    if ([sender state])
        [openPanel setAllowedFileTypes:nil];
    else
        [openPanel setAllowedFileTypes:@[@"dsk"]];
}

documentationによるとsetAllowedFileTypes、パネルが表示されている間に使用できます:

許可されたファイル タイプは、パネルの実行中に (たとえば、アクセサリ ビューから) 変更できます。

ただし、これは期待どおりに機能していないようです。現在のビューはリロードされません。スクロールすると、新しい設定に応じてさらに下のファイル有効/無効になります。ただし、最初に表示されていたファイルは影響を受けません。

ユーザーがアクセサリ ビューのチェックボックスを切り替えたときに現在のディレクトリの内容を更新する方法が必要ですが、それを行う方法が見つからないようです。助言がありますか?

編集、2013 年 10 月 15 日: これは、何よりもマーベリックスのバグが原因のようです。ここで2人のコメント投稿者が指摘したように、Mountain Lionで実行されている同じコードは問題なく動作します.

4

2 に答える 2

3

私はこのように試してみましたが、うまくいきました:

NSOpenPanel* dialog = [NSOpenPanel openPanel];

    [dialog setAllowedFileTypes:[NSArray arrayWithObject:@"png"]];

    NSButton *openPanelAccessoryView = [[[NSButton alloc] initWithFrame:NSMakeRect(0.0, 0.0, 324.0, 22.0)] autorelease];

    [openPanelAccessoryView setButtonType:NSSwitchButton];

    [openPanelAccessoryView setBezelStyle:0];

    [openPanelAccessoryView setAction:@selector(openUnrecognizedFiles:)];

    [openPanelAccessoryView setTarget:self];

    [dialog setAccessoryView:openPanelAccessoryView];

     openPanel = dialog;

    [dialog beginSheetModalForWindow:[[self view] window] completionHandler:^(NSInteger result){
        if(result == NSFileHandlingPanelOKButton)
        {

        }
    } ];

これはあなたと同じアクションです:

- (void)openUnrecognizedFiles:(id)sender

{
     if ([sender state])
      [openPanel setAllowedFileTypes:nil];
     else
      [openPanel setAllowedFileTypes:[NSArray arrayWithObject:@"jpeg"]];
}

チェックボックスのオンとオフに応じてファイルタイプが変更されるようになりました。

于 2013-10-15T06:39:27.657 に答える