【问题标题】:NSwindow disappearNSwindow 消失
【发布时间】:2012-12-31 11:33:21
【问题描述】:

我想添加一个 NSWindow 简单的代码是:

NSWindow* myWindow;
myWindow = [[NSWindow alloc] initWithContentRect:NSMakeRect(100,100,300,300)
                                       styleMask:NSTitledWindowMask
                                         backing:NSBackingStoreBuffered
                                           defer:NO];
[myWindow makeKeyAndOrderFront:nil];

然后窗口出现一秒钟然后消失。 怎么了?

  • Xcode 4.5.2
  • MacBookPro i5 10.8.2

感谢您的回答。

【问题讨论】:

    标签: objective-c cocoa nswindow


    【解决方案1】:

    你没有保留窗口。

    将 .h 中的 NSWindow* myWindow; 定义为属性。


    在.h中

    @property (strong)NSWindow* myWindow;
    

    在.m中

    - (IBAction)button:(id)sender {
    
       if (self.myWindow==nil){
          self.myWindow= [[NSWindow alloc] initWithContentRect:NSMakeRect(100,100,300,300)
                                                   styleMask:NSTitledWindowMask
                                                     backing:NSBackingStoreBuffered
                                                       defer:NO];
       }
    
       [self.myWindow makeKeyAndOrderFront:NSApp];
    
    }
    

    编辑:

    如果您希望从同一个按钮打开多个窗口。创建数组

    在.h中

    @property(strong) NSMutableArray *myWindowArray;
    

    在.m中

    - (IBAction)button:(id)sender {
        self.myWindow= [[NSWindow alloc] initWithContentRect:NSMakeRect(100,100,300,300)
                                                       styleMask:NSTitledWindowMask
                                                         backing:NSBackingStoreBuffered
                                                           defer:NO];
    
    
        [self.myWindowArray addObject:self.myWindow];
    
        for (NSWindow *win in self.myWindowArray) {
            [win makeKeyAndOrderFront:NSApp];
    
        }
    }
    

    编辑 2:

    找到application here

    【讨论】:

    • 将其设为“self.myWindow”,答案会更好。此外,在创建新窗口之前,您可能需要检查是否已经有一个分配给“self.myWindow”的窗口。
    • 如果我想在单击按钮时始终打开一个新窗口?
    • 如果你正在创建一个属性,你不需要声明一个实例变量,因为属性的合成将包含一个实例变量,如果你出于某种原因真的想要一个 ivar,有没有理由在 .h 中声明它——它是类的私有实现细节,因此它属于该类的 .m 文件。
    • @PeterHosey:哎呀......对不起那个 ivar......我来自 c/c++ 背景,仍然说类的所有实例都是 ivar。但是在代码中没有 ivar 唯一的属性......:p
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多