如何在cocoa中了解焦点窗口,以及如何将其设置为所需的窗口。

时间:2016-06-02 05:23:15

标签: objective-c macos cocoa nswindow nswindowcontroller

我是cocoa mac开发的新手,现在我正在开发一个在特定时间之后有几个服务器命中的mac应用程序。如果命中获得所需数据,那么我需要显示等效窗口并显示我正在使用[myWindow showWindow:self]方法的窗口。它显示了所需的窗口并将关键窗口设置为我的可见窗口是myWindow。

直到现在一切都很好但问题是假设用户开始在任何窗口上工作并打开其他几个子窗口时,不幸的是我的显示窗口被调用并且我的工作窗口的焦点转移到其他窗口。

经过几次搜索,我发现我可以通过访问[[NSApplication sharedApplication] keyWindow]委托来获得焦点窗口,我应用了几个条件,当我和这个窗口在关键窗口时,然后不要点击服务器。

但问题并没有得到解决。现在我认为将keyWindow设置为我当前的工作窗口将是最好的选择。

请建议我该怎么做以及如何强行设置一个窗口作为我的关键窗口。

任何帮助将不胜感激。 在此先感谢。

1 个答案:

答案 0 :(得分:1)

如果我正确理解了您的问题,如果它从您的服务器接收输入但未在当前主窗口或关键窗口前移动它,则希望向前移动窗口。

您使用的方法showWindow:属于NSWindowController,并且都显示一个窗口并使其成为关键。

您需要了解的是用于管理窗口级别的NSWindow方法,orderFront:

特别是你可能想要使用orderWindow:relativeTo:,它允许在另一个窗口的前面/后面放置一个窗口。例如:

[<window> orderWindow:NSWindowBelow
           relativeTo:NSApp.keyWindow.windowNumber];

会将窗口移动到当前关键窗口的后面,并且位于关键窗口后面的任何其他窗口的前面。

HTH