【问题标题】:How to get NSAlert sheet to return focus to calling window?如何让 NSAlert 表将焦点返回到调用窗口?
【发布时间】:2026-01-22 02:35:01
【问题描述】:

我有一个调用 NSAlert 表的 OS X prefpane:

 [alert beginSheetModalForWindow:[[self mainView] window] modalDelegate:self didEndSelector:@selector(unsavedChangesAlertDidEnd:returnCode:contextInfo:) contextInfo:nil];

它很好地显示了附加到系统偏好设置应用程序的警报表,但是当我单击表单的确定按钮时,它会关闭并且不会将焦点返回到系统偏好设置。有什么想法吗?

【问题讨论】:

    标签: objective-c cocoa macos


    【解决方案1】:

    尝试在您的-unsavedChangesAlertDidEnd:returnCode:contextInfo: 方法结束时向该窗口发送-makeKeyAndOrderFront: 消息。

    【讨论】:

    • 由于某种原因,我的窗口没有那个选择器。我正在从我的 prefpane 中调用窗口,例如:[[self mainView] window]
    • timmerk:所有窗口(即 NSWindow 或其任何子类的所有实例)都响应该选择器。如果您发布实际的异常消息会有所帮助。
    • Peter:我也是这么想的,但是 Xcode 一直说 window 可能不会响应它。也不例外,但我发现了问题 - 在我的 unsavedChangesAlertDidEnd 方法中,我使用 NSWorkspace 启动了一个后台应用程序,导致失去焦点。谢谢大家!
    • @K_T 你应该发布你的答案作为这个问题的答案并接受它。这是 * 上完全可以接受的行为!