【问题标题】:Activate all windows from background when clicking on main window单击主窗口时从后台激活所有窗口
【发布时间】:2015-09-02 08:28:25
【问题描述】:

我有一个 Objective-C 应用程序,它有一个主窗口和一个带有堆栈视图的小进度窗口,用于显示当前进度。

如果通过激活任何其他应用程序然后单击 Dock 图标将应用程序置于后台,则主窗口和辅助窗口都会被置于前面并显示。

但是,如果我只是在后台单击其中一个窗口,则只有那个窗口被激活并被带到前面,另一个留在后面。

我想实现这样当我单击主窗口时,它与单击 Dock 图标的操作相同,它应该在激活主窗口的情况下显示两个窗口。

但是如果我点击进度窗口,我不希望主窗口被带到前面。

我还没有找到方法来做到这一点,我应该如何实现这一目标?

【问题讨论】:

    标签: objective-c cocoa


    【解决方案1】:

    您可以使用窗口代理的-windowDidBecomeKey:-becomeKeyWindow 或应用程序代理的-didBecomeActive: 检测正在单击的窗口。

    然后根据您的具体需求,您可以使用[NSApp activateIgnoringOtherApps:][[NSRunningApplication currentApplication] activateWithOptions:](也可能是NSApplicationActivateAllWindows)。

    【讨论】:

    • 谢谢,这就是我要找的。一个小问题,在测试 [[NSRunningApplication currentApplication] activateWithOptions:NSApplicationActivateAllWindows] 时,没有窗口成为关键,除非我先单击辅助窗口,否则我使用的主窗口无法成为关键。我已经实现了我需要的东西,但这只是一个问题,如果还有更多的东西。在文档中没有看到任何内容。
    • 当您说“无法成为关键”时,您是否尝试手动调用-makeKeyAndOrderFront:?有可能(很可能)不同于activateWithOptions:
    • 我试过这个:[[NSRunningApplication currentApplication] activateWithOptions:NSApplicationActivateAllWindows]; [_window becomeKeyWindow];
    • 你不应该打电话给becomeKeyWindow,你应该打电话给makeKeyWindow。或makeKeyAndOrderFront。另外,您可能想切换这两个调用的顺序(不确定,我没有尝试过)。
    • 是的,问题是我在 -windowDidBecomeKey: 中尝试过,当移动到 -windowDidBecomeMain 时,它按预期工作。它在设置中循环并成为关键。感谢您的回复,现在它正在按我的意愿工作!
    猜你喜欢
    • 2021-08-06
    • 2016-11-08
    • 1970-01-01
    • 1970-01-01
    • 2018-04-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多