加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

objective-c – 如何关闭OSX窗口?

发布时间:2020-12-14 17:34:06 所属栏目:百科 来源:网络整理
导读:我想创建一个主要只涉及状态栏的应用程序.到目前为止,我已经使用NSMenu和NSStatusBar创建了状态栏项,我还在加载时删除了带有这段代码的停靠图标: [NSApp setActivationPolicy: NSApplicationActivationPolicyAccessory]; 但我仍然拥有打开应用程序时出现的N
我想创建一个主要只涉及状态栏的应用程序.到目前为止,我已经使用NSMenu和NSStatusBar创建了状态栏项,我还在加载时删除了带有这段代码的停靠图标:

[NSApp setActivationPolicy: NSApplicationActivationPolicyAccessory];

但我仍然拥有打开应用程序时出现的NSWindow.

我怎么能阻止这个?我也希望能够重新打开它.

我想出了一个可怕的方法来关闭它:

[_mainView setFrame:CGRectMake(0,0)];

其中_mainView是我的viewcontroller中的主要NSView,它连接到nswindow.

然后我希望能够再次打开窗口,但这次是一张桌子.但我得到错误:

<Warning>: void CGSUpdateManager::log() const: conn 0x18de3 token 0x31fffffffffdafd

将帧重置为原始大小时.

此外,如果我关闭NSView,那意味着我无法再次重新打开视图.

这是对应用程序的冗长解释,该应用程序可以控制viewcontroller所在的窗口是打开还是关闭.

解决方法

创建仅显示在状态栏中而不显示在Dock或Application Tabbing中的NSStatusBar项目应用程序.而不是显示任何正常的菜单.即文件,编辑,查看等..

您需要将Application is agent (UIElement) – (布尔值)YES键 – 值添加到应用程序info.plist.

enter image description here

并确保在属性检查器中关闭窗口’可见的启动’.

更新:

在无故事板应用程序(OS X)中

在IB中为窗口设置’可见时启动’关闭将停止在启动时出现的窗口.

但是有一个故事板应用程序.这不行.

“可见时启动”已经设置为关闭.但无论如何,窗口将始终显示.

(我认为这是苹果设计故事板和人机界面指南的一部分.也许是因为它们来自iOS,应该总是有一个窗口.)

可能有一些方法可以改变这种行为,但我发现如果你在NSWsowController的Attributes Inspector中取消选中初始控制器

enter image description here

这将停止启动时显示的窗口.这是有道理的,因为该应用程序现在没有任何指示,最初显示任何内容.

要打开窗口,您只需将菜单项链接到IB的NSWindowController的Presenting Segue Show:方法即可.

如果要以编程方式打开窗口,则必须重新指向代码中的控制器.

>在IB中再次选择NSWindowController
>转到Identity Inspector.
>为Storyboard ID提供标识“Main”

enter image description here

>现在转到AppDelegate.h文件并添加Property和IBAction:

@property (strong) IBOutlet NSWindowController *winController;

          -(IBAction)showWindow:(id)sender;

>然后转到AppDelegate.m文件并在applicationDidFinishLaunching中添加此代码

NSStoryboard *storyBoard = [NSStoryboard storyboardWithName:@"Main" bundle:nil];

         NSWindowController * main = [storyBoard instantiateControllerWithIdentifier:@"Main"];

         _winController = main;

(注意只是通过直接将它与AppDelegate中的属性相关联来添加控制器对我来说不起作用)

>现在将IBAction代码添加到AppDelegate.m

-(IBAction)showWindow:(id)sender {

          [_winController showWindow:self];


         }

您需要将IBAction正常链接到您希望通过IB打开窗口的菜单项.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读