NSTextField在自定义NSWindow中不可编辑



大家好,

如果我在控制器的视图中创建NSTextField,那么一切都很好——该字段是可编辑的。不幸的是,我不得不在新的自定义NSWindow中创建NSTextField。我下面的代码产生了一个看起来没有焦点的字段(文本选择是灰色的),并且是不可编辑的(没有光标,对按键没有反应)。我可以用鼠标更改文本选择,但仅此而已。

我是否必须启用NSWindow才能接收按键?

感谢您的帮助,--Josef

      NSRect windowRect = [[self.window contentView] frame] ;
      NSWindow* uiWindow          = [[NSWindow alloc]  initWithContentRect:windowRect
                    styleMask:NSBorderlessWindowMask
                    backing:NSBackingStoreBuffered defer:YES];
      [uiWindow setBackgroundColor: [NSColor redColor/*clearColor*/]];
      [uiWindow setOpaque:NO];
      NSView* uiView = [[[NSView alloc] initWithFrame:NSMakeRect(0, 0, windowRect.size.width, windowRect.size.height)] autorelease];
      [uiView translateOriginToPoint:NSMakePoint(100, uiView.bounds.size.height/2)];
      uiView.wantsLayer = YES;
      [uiWindow setContentView:uiView];
      NSTextField *textField;
      textField = [[NSTextField alloc] initWithFrame:NSMakeRect(0, 0, 800, 80)];
      [textField setFont:[NSFont fontWithName:@"Helvetica Bold" size:60]];
      [textField setStringValue:@"My Label"];
      [textField setBezeled:YES];
      [textField setDrawsBackground:YES];
      [textField setEditable:YES];
      [textField setSelectable:YES];
      [textField setEnabled:YES];
      [uiView addSubview:textField];

// THIS DOES NOT WORK
[self.window addChildWindow:uiWindow ordered:NSWindowAbove];
// THIS WORKS
//[_graphicView addSubview:uiView];

您需要允许您的自定义窗口成为关键窗口。默认情况下,无边框窗口不能成为关键帧。在NSWindow子类中,添加方法canBecomeKeyWindow::

- (BOOL)canBecomeKeyWindow
{
    return YES;
}



你可以用这个来检查你的无边界窗口是否是关键窗口:

if([uiWindow isKeyWindow] == TRUE) {
    NSLog(@"isKeyWindow!");
}
else {
    NSLog(@"It's not KeyWindow!");
}



此外,对于接受关键事件的无边界窗口,类应该实现acceptFirstResponder并返回YES

如果您可以将styleMask:NSBorderlessWindowMask更改为style:NSTitledWindowMask,则上述代码将起作用。然而,我也尝试过将可编辑的TextFields添加到NSBorderlessWindow中,但似乎对我也不起作用。

最新更新