【问题标题】:Cocoa: how to reopen closed window?Cocoa:如何重新打开关闭的窗口?
【发布时间】:2015-07-12 13:22:35
【问题描述】:

我制作的程序没有 nib\xib 文件。这是一个简单的 NSOpengGl 窗口。它工作正常,但是当我关闭窗口(红色按钮)并想要再次打开它(通过单击任务栏图标)时 - 它不起作用。 applicationShouldHandleReopen - 不调用。 这是我的代码:

   @interface OGLView: NSOpenGLView <NSApplicationDelegate,NSWindowDelegate>
   @end

   @implementation OGLView
   -(BOOL)applicationShouldHandleReopen:(NSApplication *)theApplication hasVisibleWindows:(BOOL)flag
 {
  printf("bingo");//does not called  
 return YES;
 }

@end

和初始化:

....
view = [[OGLView alloc] initWithFrame:glRect pixelFormat:fmt];
[[view openGLContext] makeCurrentContext];

win = [ [NSWindow alloc]
      initWithContentRect: e
       styleMask:
      NSTitledWindowMask
     | NSClosableWindowMask
       |NSMiniaturizableWindowMask
      |  NSResizableWindowMask       
       backing: NSBackingStoreBuffered
       defer: YES ];

[win orderFrontRegardless];
[win setReleasedWhenClosed:NO];
[win setContentView:view];
[win makeFirstResponder:view];
[win setAcceptsMouseMovedEvents:YES];
[win setContentView:view];
[view setNeedsDisplay:YES];

[win setDelegate:view ];

[view display];  
[win makeKeyAndOrderFront: view];
...

我认为 applicationShouldHandleReopen 没有调用,因为它必须不是从 NSView 对象而是从委托调用。但我正在使用

[win setDelegate:view ];

如何调用这个委托方法? 谢谢!

【问题讨论】:

    标签: objective-c xcode cocoa delegates nsview


    【解决方案1】:

    在应用程序的“applicationShouldHandleReopen”方法中让你的窗口排序在前面

     -(BOOL)applicationShouldHandleReopen:(NSApplication *)theApplication hasVisibleWindows:(BOOL)flag
     {
        [win makeKeyAndOrderFront:self];
        return YES;
     }
    

    您应该在应用程序委托中调用“applicationShouldHandleReopen”方法,而不是在您的视图中。

    【讨论】:

    • 谢谢!但是我怎么能从代表那里打电话呢?我不知道如何制作自定义委托......请帮助 - 我是可可的新手((
    • 你想让你的视图成为应用代理吗?
    • 是的,我不知道如何将我的自定义 NSview 类作为我自己的自定义应用委托。
    • 你可以这样做:[NSApp setDelegate:self]; .因此,您将收到应用委托通知。但这不是您的视图处理这些事情的好方法。
    • 非常感谢!!! [[NSApplication sharedApplication] setDelegate:view];工作正常!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-03-19
    • 1970-01-01
    • 1970-01-01
    • 2014-09-25
    • 1970-01-01
    • 2014-07-20
    相关资源
    最近更新 更多