【问题标题】:NSPanel is always on top of all other app windowsNSPanel 始终位于所有其他应用程序窗口之上
【发布时间】:2013-01-31 14:58:25
【问题描述】:

我的 NSPanel 窗口始终位于所有其他应用程序窗口的顶部。这是我加载它的方式:

[NSApp beginSheet:[self window] modalForWindow:[rootDocument mainWindow] modalDelegate:self didEndSelector:nil contextInfo:nil];

我尝试使用 setLevel: 和不同的级别类型更改级别,或者使用 orderBack: 或 orderFront: 。但是这些方法似乎没有效果,因为窗口总是在顶部。

谢谢

【问题讨论】:

    标签: objective-c cocoa cocoa-sheet


    【解决方案1】:

    您没有将nilNil、0 或NULL 传递给didEndSelector。曾经。您将选择器传递给您已声明的方法 (-sheetDidClose:returnCode:contextInfo:)。您传递的不是选择器,这使得您正在做任何其他事情来消除工作表的嫌疑。 (您还没有说小组是否保持领先,因为它从未被解雇,但这是我的假设。)

    查看Using Custom Sheets,这是 Apple 自己关于该主题的文档。

    另外,请确保您使用的面板在 IB 中已关闭其“启动时可见”标志。

    【讨论】:

    • 否,操作完成后面板会正确关闭。但是在操作过程中,面板始终位于所有应用程序的顶部,这就是为什么我指定我尝试使用 orderBack 和 orderFront
    • 您不必摆弄面板的 z 顺序。当您调用 -beginSheet:modalForWindow:modalDelegate:didEndSelector:contextInfo: 时,您的工作表会以模态方式运行,这意味着它应该位于顶部,但只能位于它所附加的窗口顶部(即文档模式)。当您的工作表处于活动状态时,它附加到一个窗口,对吗?
    • 不,它没有附加到窗口上,它只是显示在它上面。我知道模态窗口应该在我的应用程序窗口之上,而不是所有其他应用程序窗口。
    • 我们说的是一张纸。工作表应该附加到它们的“宿主”窗口,并且应该从该窗口的标题栏向下滑动。您的工作表没有这样做,而是在“其他应用程序窗口”之上,这告诉我它的面板设置不正确。 Interface Builder 中有一个窗口或面板的标志,Visible At Launch。您需要确定它已关闭。如果这样做,您的工作表应该会正常运行。
    猜你喜欢
    • 2018-07-17
    • 1970-01-01
    • 2018-05-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-04-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多