关闭 NSWindow 后无响应的 UI 元素

Posted

技术标签:

【中文标题】关闭 NSWindow 后无响应的 UI 元素【英文标题】:Unresponsive UI Elements after closing NSWindow 【发布时间】:2013-10-27 14:40:05 【问题描述】:

上周我花了很多时间来解决以下问题。我解决了它,但由于我在这里找不到答案,所以我想与遇到此问题的任何人分享我的解决方案。


问题:我的应用程序在后台运行(菜单栏),其主NSWindow 包含我的应用程序的所有首选项。您可以通过单击左上角的关闭按钮来关闭NSWindow。关闭NSWindow 并重新打开它后,所有NSControls 都没有视觉响应。这些操作相应地起作用,但它们没有更新。

我尝试了以下方法:

在 IB 中为 NSWindow 取消选中 "Release on close" 从 NIB 重新加载 NSWindow 所有NSControls 的强大参考 在NSControls 上调用“成为第一响应者” 重新加载所有育儿NSViews 实现所有代表连接每个 NSControl(曾为 NSControl 工作,但每个人都使用它的工作量太大) 禁用然后重新启用NSControls

我将在下面发布我的解决方案以供记录。

【问题讨论】:

【参考方案1】:

我对这个问题的解决方案是继承NSWindow 并覆盖以下方法:

- (void)performClose:(id)sender
    [self orderOut:nil];


- (void)close
    [self orderOut:nil];

现在NSWindow隐藏 / 订购了,您只需在显示时重新订购即可。

【讨论】:

以上是关于关闭 NSWindow 后无响应的 UI 元素的主要内容,如果未能解决你的问题,请参考以下文章

如何使 NSWindow 中的按钮在工作表上时可点击

startActivityForResult调用后立即响应了OnActivityResult()方法,导致setResult()后无响应

在 Swift 中打开一个关闭的 NSWindow 会导致应用程序崩溃

如何以编程方式关闭全屏模式NSWindow?

cocos2d第二次打开后无响应的场景

在 NSWindow 下方显示内容的最佳方式是啥?