我有一个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
显然正确执行了方法,因为打印文本。我假设我的出现/消失代码是假的。
答案 0 :(得分:0)
首先,您应该通过让它在笔尖中可见,验证第二个文本字段是否在正确的位置,具有正确的布局约束等。请致电setHidden:YES
将其隐藏在方便的地方,例如awakeFromNib
,以便它最初不可见;但是你可以注释掉setHidden:调用它在启动时可见。我最初的怀疑是setHidden:NO
调用工作正常,但由于其他原因,文本字段不可见。
除此之外,您只需检查所有连接是否正常,保留对象等。我注意到您发布的代码声明了一个名为TestTextFiel
的插座,但随后在setHidden:
上调用testTextFiel
{1}},这是不一样的 - 案件很重要。您可以在NSLog
方法中添加testTextFiel
becomeFirstResponder
来验证它是否存在;如果是,你可以NSLog
superview
;等。调试。做一些侦探工作来弄清楚什么是错的。致电setHidden:NO
后,文本字段应该存在,具有正确的超级视图,具有感知框架,将NO
返回-hidden
等等;您可以在调试器中验证这些内容。如果它仍然没有绘制,可能你需要拨打setNeedsDisplay:
,尽管我认为这是不必要的。无论如何,我们在stackoverflow上实际上不可能为你做调试工作;这是您需要学习的编程基本技能。 : - >