NSWindow子类不会在第二次渲染时绘制标题栏

时间:2015-09-22 18:22:49

标签: objective-c cocoa

我正在为脚本语言实现编写一些粘合GUI代码,并且需要能够以编程方式创建窗口并拦截其视图上的键和鼠标命令。我已经将NSWindow和NSView分类。

当我第一次打开一个窗口时,我会看到一个带有标题栏和控件的窗口。如果我关闭此窗口并打开另一个窗口,则控件和标题不会出现在新窗口中。但是,如果我单击控件应该的位置,新窗口(带有不可见的控件)仍会关闭。

我的窗口初始化中是否有可能导致这种情况的事情?

+ (HMSLWindow*)hmslWindowWithTitle:(NSString *)title frame:(NSRect)frame {
  HMSLWindow* hmslWindow = [[HMSLWindow alloc]
                            initWithContentRect: frame
                            styleMask: NSMiniaturizableWindowMask | NSTitledWindowMask | NSClosableWindowMask
                            backing: NSBackingStoreBuffered
                            defer: YES];

  hmslWindow.title = [title retain];

  [hmslWindow setContentView:[[HMSLView alloc] initWithFrame:frame]];
  hmslWindow.delegate = [[HMSLWindowDelegate alloc] init];
  [hmslWindow cascadeTopLeftFromPoint:NSZeroPoint];
  [hmslWindow makeKeyAndOrderFront:self];

  [[HMSLWindow windowDictionary] setObject:hmslWindow forKey:[NSNumber numberWithInteger:hmslWindow.windowNumber]];

  return hmslWindow;
}

- (void)close {
  [[HMSLWindow windowDictionary]
   removeObjectForKey:[NSNumber numberWithInteger:self.windowNumber]];
  [self.contentView autorelease];
  [self.delegate autorelease];
  [self.title autorelease];
  [super close];
}

第一个窗口:

First window

第二个窗口(带有白色背景的contentView是正确的,但标题栏现在是空的):

Second window

0 个答案:

没有答案