默认情况下,可可应用程序中的模态窗口不在焦点上

Posted

技术标签:

【中文标题】默认情况下,可可应用程序中的模态窗口不在焦点上【英文标题】:Modal window not in focus by default in cocoa application 【发布时间】:2013-07-17 21:55:53 【问题描述】:

我试图在我的 cocoa 应用程序中弹出一个警报 (NSAlert) 消息框。但默认情况下它不关注此警报窗口。相反,焦点仍然在应用程序的 mainWindow 上。以下是我的代码:-

[Alert beginSheetModalForWindow:[NSApp mainWindow] modalDelegate:g_pOpenGLView didEndSelector:@selector(CNNotifyHardwareDecodeFailDidEnd:ReturnCode:ContextInfo:) contextInfo:nil];

当我将此消息框作为 [Alert runModal] 运行时,它可以正常工作,并且将全部焦点放在警报框上。但我不想那样做,因为它会阻止主窗口处理。有人可以帮我弄这个吗?我无法弄清楚我哪里出错了。

【问题讨论】:

您在确定警报是否具有“完全焦点”时所做的区分是什么? 我希望默认选择警报框中的选项之一。除非警报框被解除,否则用户不应该能够与其他窗口进行交互。如果是这样,我会说警报框具有全部焦点。 工作表的全部意义在于它们只是它们出现的窗口的模态。如果您想阻止应用中所有窗口的交互,请使用专为此设计的-runModal 是的,你是对的。我也想做同样的事情:“警报框应该是它出现的窗口的模式”。但事实并非如此。即使警报框窗口作为模式表出现在其顶部,主窗口仍在接受键盘输入。有什么建议吗? 嗯,这是非常出乎意料的行为!床单一直对我很有效。建议您发布一个显示问题的示例项目。 【参考方案1】:

你可以试试

[[Alert window] makeKeyWindow];

【讨论】:

仍然没有获得键盘焦点。你还有什么建议吗?

以上是关于默认情况下,可可应用程序中的模态窗口不在焦点上的主要内容,如果未能解决你的问题,请参考以下文章

在模态窗口内调整图像大小

WPF 打开新窗口 如何设置 焦点还在原来的窗口 谢谢

“模态”与“非模态”

手动模态segue不起作用,View Controller不在窗口层次结构中?

Firebase 云消息在超出窗口焦点时不显示通知

在不关闭子窗口的情况下从子窗口返回焦点到父窗口(在mfc visual studio中)