2

我有一个 NSPanel,我需要将文件路径加载到它的一个字段中。

我目前正在使用:

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:[self window]]; 但我遇到了两个问题:

  1. 面板总是在我的模态表的背面,我不能在上面显示它。此外,我无法移动保留在原始工作表上的焦点。

  2. 如果我不以模态方式加载它,如何分配结束选择器来处理数据?

谢谢

4

3 回答 3

0

每个窗口一张。更多的工作表意味着更多的窗口和奇怪的 UI。

于 2013-02-27T13:50:27.480 回答
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

展示一系列表格

Cocoa 不支持级联或嵌套表的概念。根据Apple 人机界面指南,“当用户响应一个工作表,并且该文档的另一个工作表打开时,第一个工作表必须在第二个工作表打开之前关闭。”</p>

该文档继续告诉您如何呈现一系列工作表,当第二个打开时,它会关闭第一个,等等。

您要么需要采用这样的系列,要么更改您的设计,以便您的第一张工作表,即调用 NSOpenPanel 的工作表,根本就不是工作表。

仅供参考:在沙盒世界NSOpenPanel中是一个非常不同的野兽,同时保持基本相同的 UI。其中的变化是NSOpenPanel不再是NSWindow...的子类。您现在可能玩的技巧可能会NSOpenPanel在沙盒下崩溃和燃烧,小心行事。

于 2013-02-27T19:31:26.293 回答