当另一个 NSTextField 获得焦点时,NSTextField 应该出现

NSTextField should appear when another NSTextField gets focus

我有一个 NSTextField,它是我从 NSTextField 继承而来的,我希望在我的 TextField 获得焦点时出现一个新的 NSTextField。我更改了方法 becomeFirstResponder ,它也有效,因为它在日志区域打印 "TextField got focus"。

但是我的第二个 TextField 的出现/消失不起作用。它也在IB中连接。

代码如下:

@interface MyNewTextField : NSTextField{

IBOutlet NSTextField* TestTextFiel;
}

MyNewTextField.m:

#import "SollkontoFeld.h"
@implementation SollkontoFeld

- (void)drawRect:(NSRect)dirtyRect {
[super drawRect:dirtyRect];
}

-(BOOL)becomeFirstResponder{
  [testTextFiel setHidden:NO];
  NSLog(@"TextField got focus");  
  return YES;
}
@end

这些方法显然是正确执行的,因为文本被打印出来了。我假设我的出现/消失代码是假的。

首先,您应该验证第二个文本字段是否在正确的位置,具有正确的布局约束等,方法是让它在 nib 中开始显示。调用 setHidden:YES 将其隐藏在方便的地方,例如 awakeFromNib,这样它一开始就不可见;但随后您可以注释掉 setHidden: 调用以使其在启动时可见。我最初的怀疑是 setHidden:NO 调用工作正常,但文本字段由于其他原因不可见。

除此之外,您只需要检查所有连接是否良好、对象是否已保留等。我注意到您发布的代码声明了一个名为 TestTextFiel 的插座,但随后调用了 setHidden:testTextFiel 上,这是不一样的——大小写很重要。您可能只是在 becomeFirstResponder 方法中添加一个 NSLog of testTextFiel 来验证它是否存在;如果是这样,您可以 NSLogsuperview;等调试。做一些侦探工作找出问题所在。调用 setHidden:NO 后,文本字段应该存在,具有正确的超级视图,具有合理的框架,return NO-hidden 等;您可以在调试器中验证这些内容中的每一个。如果它仍然没有绘制,也许你需要调用 setNeedsDisplay:,虽然我 认为 没有必要。无论如何,我们在 Whosebug 上真的不可能为您完成调试工作;这是您需要学习的编程基本技能。 :->