我有一个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]];但是我遇到了两个问题:
面板总是在我的模态表的背面,我无法在顶部显示。此外,我无法移动原始工作表上的焦点。
如果我没有以模态方式加载数据,如何指定结束选择器来处理数据?
由于
答案 0 :(得分: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];
编辑:
答案 1 :(得分:0)
每个窗口一张。更多工作表意味着更多的窗口和奇怪的UI。
答案 2 :(得分:0)
来自Presenting a Series of Sheets:
Cocoa不支持级联或嵌套工作表的概念。根据 Apple人机界面指南,“当用户响应工作表,并打开该文档的另一个工作表时,第一个工作表必须在第二个工作表打开之前关闭。”
该文档继续告诉您如何呈现系列的工作表,因为第二个打开它会关闭第一个,等等。
您需要采用这样的系列或更改您的设计,以便您的第一张纸,即NSOpenPanel的纸张,根本不是纸张。
仅供参考:在沙盒世界中NSOpenPanel
是一个非常不同的野兽,同时保持基本相同的用户界面。其中的变化是NSOpenPanel
不再是NSWindow
的子类...现在使用NSOpenPanel
可能会玩的技巧可能会崩溃并在沙盒下燃烧,轻轻一点。