2

NSPanelがあり、そのフィールドの1つにファイルパスをロードする必要があります。

私は現在使用しています:

NSOpenPanel *browsePanel = [[NSOpenPanel alloc] init];
[browsePanel setCanChooseFiles:YES];
[browsePanel setCanChooseDirectories:NO];
[browsePanel setCanCreateDirectories:NO];
[browsePanel beginSheetForDirectory:nil
                               file:nil
                              types:nil
                     modalForWindow:[self window]
                      modalDelegate:self
                     didEndSelector:@selector(browsePanelPanelDidEnd:returnCode:contextInfo:)
                        contextInfo:[NSNumber numberWithInteger:[sender tag]]
 ]; 

しかし、NSOpenPanelシートが表示されず、コンソールにエラーメッセージが表示されません。既存のシートから開いているので、一度に1枚しかロードできないからだと思います。

したがって、現在[browsePanel makeKeyAndOrderFront:[selfwindow]]を使用しています。しかし、私は2つの問題を抱えています:

  1. パネルは常にモーダルシートの裏側にあり、上に表示することはできません。また、元のシートに残っているフォーカスを移動できません。

  2. データをモーダルにロードしない場合、データを処理するためにエンドセレクターを割り当てるにはどうすればよいですか?

ありがとう

4

3 に答える 3

0

あなたが使用している:

- (void)beginSheetForDirectory:(NSString *)path file:(NSString *)name types:(NSArray *)fileTypes modalForWindow:(NSWindow *)docWindow modalDelegate:(id)delegate didEndSelector:(SEL)didEndSelector contextInfo:(void *)contextInfo NS_DEPRECATED_MAC(10_0, 10_6);

これは非推奨です。あなたは使用する必要があります

[browsePanel beginSheetModalForWindow:self.window completionHandler:nil];

編集:

この実行中のプロジェクトを確認してください

于 2013-02-27T11:21:09.190 に答える
0

ウィンドウごとに1枚。より多くのシートはより多くのウィンドウと奇妙なUIを意味します。

于 2013-02-27T13:50:27.480 に答える
0

一連のシートの提示から:

Cocoaは、カスケードまたはネストされたシートの概念をサポートしていません。Appleヒューマンインターフェイスガイドラインによると、「ユーザーがシートに応答し、そのドキュメントの別のシートが開いた場合、最初のシートは2番目のシートが開く前に閉じる必要があります。」</ p>

ドキュメントは、一連のシートを提示する方法を説明します。2番目が開くと、最初のシートが閉じます。

このようなシリーズを採用するか、デザインを変更して、NSOpenPanelと呼ばれる最初のシートがまったくシートにならないようにする必要があります。

参考までに:サンドボックス化された世界NSOpenPanelでは、本質的に同じUIを維持しながら、非常に異なる獣です。変更点の中にはNSOpenPanel、サブクラスではなくなったものがありNSWindowます...今プレイする可能性のあるトリックはNSOpenPanel、サンドボックスの下でクラッシュして燃える可能性があり、軽く踏みます。

于 2013-02-27T19:31:26.293 に答える