当另一个 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
来验证它是否存在;如果是这样,您可以 NSLog
其 superview
;等调试。做一些侦探工作找出问题所在。调用 setHidden:NO
后,文本字段应该存在,具有正确的超级视图,具有合理的框架,return NO
到 -hidden
等;您可以在调试器中验证这些内容中的每一个。如果它仍然没有绘制,也许你需要调用 setNeedsDisplay:
,虽然我 认为 没有必要。无论如何,我们在 Whosebug 上真的不可能为您完成调试工作;这是您需要学习的编程基本技能。 :->
我有一个 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
来验证它是否存在;如果是这样,您可以 NSLog
其 superview
;等调试。做一些侦探工作找出问题所在。调用 setHidden:NO
后,文本字段应该存在,具有正确的超级视图,具有合理的框架,return NO
到 -hidden
等;您可以在调试器中验证这些内容中的每一个。如果它仍然没有绘制,也许你需要调用 setNeedsDisplay:
,虽然我 认为 没有必要。无论如何,我们在 Whosebug 上真的不可能为您完成调试工作;这是您需要学习的编程基本技能。 :->