通过setHidesOnDeactivate隐藏的NSWindow如何取消隐藏?

3
我很确定答案一定很简单,但是由于某些原因我无法让它工作!
我有一个窗口和这段代码:
[someWindow setHidesOnDeactivate:YES];

我有一个状态项,以下是代码:

- (void)openWindow{
   if ([someWindow isVisible]) {
         NSLog(@"CLOSING");
         [lyricWindow close];
   }else {
          [someWindow makeKeyAndOrderFront:nil];
         NSLog(@"SHOWING");
   }

}

当我关闭窗口并想要再次打开它时,这个方法是有效的。现在我已经实现了隐藏和停用功能,但我不知道该怎么做了!我尝试了各种方法...我希望当我单击状态栏项目时,窗口能够再次显示并变为活动状态!我认为这就是我的问题所在。
当我单击状态栏项目时,如何使窗口变为活动状态?
日志中显示以下内容:
CLOSING SHOWING CLOSING SHOWING
无论窗口是否被隐藏,关闭都是首先发生的,这相当有趣,因为如果窗口已被隐藏,isVisible应该返回false。无论如何,我没有窗口。如何取消隐藏窗口?
谢谢!
1个回答

10
我遇到了同样的问题,就是当窗口被隐藏后,无法再次显示出来。在我的情况下,当按下NSStatusItem时,我正在显示NSPanel(NSWindow的子类)。
以下代码最终使我的NSPanel重新显示:
[NSApp arrangeInFront:sender];
[myWindow makeKeyAndOrderFront:sender];
[NSApp activateIgnoringOtherApps:YES];

我相信这里的关键是 'activateIgnoringOtherApps'。对我来说,这并不是理想的,因为它会从用户当前使用的应用中夺取焦点。


“[NSApp unhide];” 看起来是由 “[NSApp activateIgnoringOtherApps:YES];” 调用的关键内容,因此您可以安全地替换它。 - gwdp
对于这个问题,[NSApp unhideWithoutActivation] 更加合适吗? - sam

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接