我对 NSSavePanel 和 NSOpenPanel 的附件视图有疑问。
有时,(经常)当我打开这些面板之一时,附件视图不起作用(显示视图但控件似乎已禁用)。
我正在使用此代码显示面板:
[openPanel beginSheetModalForWindow:appWindow completionHandler:openPanelHandler];
这仅在启用 app-sandbox 时发生。
经过大量测试后,我发现发生的事情是视图放错了位置(未附加到面板上)。
When I open Mission Control and move the mouse pointer over the app windows I noticed that an "invisible" window hilighted and when select it I can take control over the accessory view (all controls work) but it appears detached from the open or save panel如屏幕截图所示。
我试图创建一个新应用程序只是为了测试这种行为,但无法重现它,所以我想这与我的应用程序有关。
任何暗示我可能做错了什么?
我不想为了解决这个问题而从头开始编写所有代码。
编辑
顺便说一句,当我关闭窗口时,就在窗口关闭之前,附件视图会闪烁控件的正确值。应用程序似乎没有及时添加视图以显示面板。
更新 1
我对用作辅助视图的视图进行了子类化,并注意到
- (void)viewWillMoveToSuperview:(NSView *)newSuperview
被称为,但是
- (void)viewDidMoveToSuperview
即使视图正确显示,也永远不会被调用,这是正常行为吗?
更新 2
我确认- (void)viewDidMoveToSuperview
应该调用,在测试应用程序上调用了这两种方法。
我还注意到我的应用程序和测试应用程序之间存在细微差别。在我的应用程序上,面板只是向下滑动,但在测试应用程序上,面板似乎“向下翻转”(不知道具体如何描述)。面板的显示方式与我无关,我只是注意到它的显示方式不同。