【问题标题】:set NSWindow focused设置 NSWindow 焦点
【发布时间】:2011-02-23 10:24:54
【问题描述】:

我有一个带有一个窗口和一个面板的应用程序,附加到这个窗口。

步骤:

  1. 停用我的应用(应用已打开,但没有焦点)
  2. 单击面板上的按钮(面板现在已聚焦,但主窗口未聚焦)

如何从面板设置焦点到主窗口(父窗口)?

【问题讨论】:

  • 主窗口是Cocoa主窗口吗?你的应用程序是基于 NSDocument 的吗?你说的焦点是指关键窗口状态吗?
  • 当我说“设置焦点”时,我的意思是“激活”主窗口,设置关键窗口状态。应用程序始终位于屏幕顶部。当我单击主窗口外的某个位置时,应用程序将停用,但位于顶部。
  • 您对 activateWithOptions 的回答:也对我有用。如果您将其发布为答案,我很乐意投票:)
  • 确保您的面板对 canBecomeKeyWindow 响应“是”

标签: objective-c cocoa focus nswindow nspanel


【解决方案1】:

Swift 5 版本的@BUDDAx2 答案:

NSApplication.shared.activate(ignoringOtherApps: true)

【讨论】:

    【解决方案2】:

    不清楚您所说的焦点是什么意思,以及您所说的主窗口是否是Cocoa中定义的主窗口。假设它是一个 Cocoa 主窗口,并且焦点与键状态相同,

    [[NSApp mainWindow] makeKeyWindow];
    

    [[NSApp mainWindow] makeKeyAndOrderFront:self];
    

    如果不是 Cocoa 主窗口,则需要有引用并发送-makeKeyWindow-makeKeyAndOrderFront:

    【讨论】:

    • 它不工作。也许,因为主窗口是 NSFloatingWindowLevel?
    • @BUDDAx2 主窗口是否有标题栏或调整大小栏?如果向主窗口发送-canBecomeKeyWindow,返回值是多少?
    • -canBecomeKeyWindow 返回真
    • 我明白我需要什么:[[NSRunningApplication currentApplication] activateWithOptions: NSApplicationActivateIgnoringOtherApps];但是我为 10.6 和 10.5 编译了我的应用程序。 NSRunningApplication 类仅在 10.6 中。如何在 10.5 中做到这一点?
    • [[NSApplication sharedApplication] activateIgnoringOtherApps:YES]; // "Available in OS X v10.0 and later."
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-10-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-06-19
    相关资源
    最近更新 更多