gpt4 book ai didi

objective-c - 如何非模态打开 NSOpenPanel (因为我要打开现有工作表)

转载 作者:行者123 更新时间:2023-12-03 16:46:44 27 4
gpt4 key购买 nike

我有一个 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. 如果我不以模态方式加载数据,如何分配结束选择器来处理数据?

谢谢

最佳答案

来自Presenting a Series of Sheets :

Cocoa does not support the notion of cascading, or nested sheets. Per Apple Human Interface Guidelines, “when the user responds to a sheet, and another sheet for that document opens, the first sheet must close before the second one opens.”

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

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

仅供引用:在沙盒世界中,NSOpenPanel 是一个非常不同的野兽,同时保持基本相同的 UI。其中的变化是 NSOpenPanel 不再是 NSWindow 的子类...您现在可能使用 NSOpenPanel 玩的技巧可能会在沙箱下崩溃并烧毁,轻装上阵。

关于objective-c - 如何非模态打开 NSOpenPanel (因为我要打开现有工作表),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15110697/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com