【发布时间】:2012-07-16 00:06:11
【问题描述】:
我对 NSSavePanel 和 NSOpenPanel 上的附件视图有疑问。
有时,(经常)当我打开其中一个面板时,附件视图不起作用(显示视图但控件似乎已禁用)。
我正在使用此代码来显示面板:
[openPanel beginSheetModalForWindow:appWindow completionHandler:openPanelHandler];
这仅在启用应用沙盒时发生。
经过多次测试,我发现发生的事情是视图放错了位置(未附加到面板上)。
当我打开任务控制并通过应用程序窗口移动鼠标指针时,我注意到一个“不可见的”窗口,并且选择它时可以控制附件视图(所有控件工作),但它看起来从打开中分离或如屏幕截图所示保存面板。
我尝试创建一个新应用只是为了测试这种行为,但无法重现它,所以我想这与我的应用有关。
任何提示我可能做错了什么?
我不想为了解决这个问题而从头开始编写所有代码。
编辑
顺便说一句,当我关闭窗口时,就在窗口关闭之前,附件视图会闪烁控件的正确值。应用程序似乎没有及时添加视图以显示面板。
更新 1
我将用作辅助视图的视图子类化并注意到
- (void)viewWillMoveToSuperview:(NSView *)newSuperview
被调用,但是
- (void)viewDidMoveToSuperview
即使视图正确显示也不会被调用,这是正常行为吗?
更新 2
我确认应该调用- (void)viewDidMoveToSuperview,在测试应用上这两个方法都被调用了。
我还注意到我的应用和测试应用之间存在细微差别。在我的应用程序上,面板只是向下滑动,但在测试应用程序上,面板似乎“向下翻转”(不知道具体如何描述)。面板的显示方式与我无关,我只是注意到它的显示方式不同。
【问题讨论】:
标签: cocoa sandbox nsopenpanel nssavepanel accessoryview