0

我想在加载时以编程方式将几个 NSTextFields 添加到窗口中。我为 init 中的每个调用以下方法,例如:

- (id)initWithWindow:(NSWindow *)window{
    [self addTextField:firstTextField toWindow:window at:20];
}

-(void)addTextField:(NSTextField*)theTextField toWindow:(NSWindow*)theWindow at:(CGFloat)y{

    theTextField = [[NSTextField alloc] initWithFrame:NSMakeRect(10, y, 200, 20)];
    [theTextField setBezeled:NO];
    [theTextField setDrawsBackground:NO];
    [theTextField setEditable:NO];
    [theTextField setSelectable:YES];

    [[theWindow contentView] addSubview:theTextField];
}

我没有收到任何错误,即使我为其中一个 NSTextFields 调用 setStringValue。但是,它们在窗口中不可见。我错过了一些简单的事情,还是我尝试了一些不允许的事情?

谢谢

4

2 回答 2

0

如果您从 xib 加载您的窗口,您不应该覆盖-initWithWindow:-windowDidLoad而是使用并在此方法中添加您的文本字段。但是,如果您以编程方式创建窗口,则-initWithWindow:必须如下所示:

-(id)initWithWindow:(NSWindow*)window {
    self = [super initWithWindow:window];
    if(self) {
        [self addTextField:firstTextField toWindow:self.window at:20];
    }
    return self;
}
于 2013-09-12T06:59:16.090 回答
0

试试这样: -

- (void)windowDidLoad
{
  NSRect frameRect = NSMakeRect(10, 20, 200, 20);
  NSTextField *theTextField = [[NSTextField alloc] initWithFrame:frameRect];
  [theTextField setBezeled:YES];
  [theTextField setDrawsBackground:NO];
  [theTextField setEditable:NO];
  [theTextField setSelectable:YES];
  [vw addSubview:theTextField]; 
  [[[self window]contentView]addSubview:vw];
  [super windowDidLoad];

  // Implement this method to handle any initialization after your window controller's   window has been loaded from its nib file.
}
于 2013-09-12T17:18:27.363 回答