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

时间:2015-11-16 16:27:04

标签: objective-c macos cocoa delegates nstextfield

我有一个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

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

1 个答案:

答案 0 :(得分:0)

首先,您应该通过让它在笔尖中可见,验证第二个文本字段是否在正确的位置,具有正确的布局约束等。请致电setHidden:YES将其隐藏在方便的地方,例如awakeFromNib,以便它最初不可见;但是你可以注释掉setHidden:调用它在启动时可见。我最初的怀疑是setHidden:NO调用工作正常,但由于其他原因,文本字段不可见。

除此之外,您只需检查所有连接是否正常,保留对象等。我注意到您发布的代码声明了一个名为TestTextFiel的插座,但随后在setHidden:上调用testTextFiel {1}},这是不一样的 - 案件很重要。您可以在NSLog方法中添加testTextFiel becomeFirstResponder来验证它是否存在;如果是,你可以NSLog superview;等。调试。做一些侦探工作来弄清楚什么是错的。致电setHidden:NO后,文本字段应该存在,具有正确的超级视图,具有感知框架,将NO返回-hidden等等;您可以在调试器中验证这些内容。如果它仍然没有绘制,可能你需要拨打setNeedsDisplay:,尽管我认为这是不必要的。无论如何,我们在stackoverflow上实际上不可能为你做调试工作;这是您需要学习的编程基本技能。 : - >