Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/objective-c/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/google-apps-script/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Objective c 当另一个NSTextField获得焦点时,应显示NSTextField_Objective C_Macos_Cocoa_Delegates_Nstextfield - Fatal编程技术网

Objective c 当另一个NSTextField获得焦点时,应显示NSTextField

Objective c 当另一个NSTextField获得焦点时,应显示NSTextField,objective-c,macos,cocoa,delegates,nstextfield,Objective C,Macos,Cocoa,Delegates,Nstextfield,我有一个NSTextField,它是从NSTextField子类化的,我希望在我的TextField获得焦点时显示一个新的NSTextField。我更改了becomeFirstResponder的方法,该方法同样有效,因为它在日志区域打印“TextField get focus” 但是外观/消失对我的第二个文本字段不起作用。它也连接在IB中 代码如下: @interface MyNewTextField : NSTextField{ IBOutlet NSTextField* TestText

我有一个NSTextField,它是从NSTextField子类化的,我希望在我的TextField获得焦点时显示一个新的NSTextField。我更改了becomeFirstResponder的方法,该方法同样有效,因为它在日志区域打印“TextField get focus”

但是外观/消失对我的第二个文本字段不起作用。它也连接在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
调用工作正常,但textfield由于其他原因不可见


除此之外,您只需检查所有连接是否良好,对象是否保留,等等。我注意到您发布的代码声明了一个名为
TestTextFiel
的出口,但随后在
TestTextFiel
上调用
setHidden:
,这与案例不同。您可以在
becomeFirstResponder
方法中添加
testTextFiel
NSLog
,以验证它是否存在;如果有,您可以
NSLog
its
superview
;等等,调试。做些侦探工作找出问题所在。调用
setHidden:NO
后,文本字段应该存在,具有正确的超级视图,具有感官框架,将
NO
返回到
-hidden
,等等。;您可以在调试器中验证这些内容。如果它仍然无法绘制,也许您需要调用
setNeedsDisplay:
,尽管我认为这不必要。无论如何,我们在stackoverflow上不可能为您进行调试工作;这是您需要学习的编程基本技能。:->

多谢各位。这真的很有趣:我写了一个带按钮的小方法来隐藏它。隐藏起作用,而不是出现。这里是:
-(iAction)隐藏:(id)发送方{[testTextField setHidden:YES];}
与显示相同:
-(iAction)显示:(id)发送方{[testTextField setHidden:NO];}
。这两种方法都有效,但不适用于成为第一响应者。嗯,我不知道为什么会这样。对于这种情况,通常的解决方法是调用像
setHidden:
这样的方法,因为时间安排不好,所以不能做你想做的事情,而是将其作为延迟执行来调用。因此,请使用object:nil afterDelay:0.0尝试
[testTextFiel performSelector:@selector(setHidden:)
并查看这是否有帮助。
setHidden:
方法接受一个
BOOL
,不是一个对象,但是传递
nil
应该被解释为传递一个
NO
值,我认为,因为两者都用零表示;但是,如果这对您来说太老套了,请自己调用一个方法,然后调用
setHidden:
.Hmm…它仍然不起作用。也许你可以直接看看我的项目?我把它贴在GitHub上了。这里是链接:在您的
成为第一响应者
方法中,我添加了
NSLog(@“TextField1:%@”,TextField1),正如我上面建议的,您应该检查ivar是否正确设置;打印的
TextField1
为零。检查笔尖时,您似乎有两个对象,都名为“我的文本字段”。可见的一个与TextField1插座没有连接。不可见的一个(只是nib中的一个空闲对象)连接到其TextField1出口,但由于它不可见,这并不重要。因此,您需要删除额外的文本字段并修复nib连接。谢谢;)现在可以显示了,但我还想在焦点丢失时使NSTextField消失。因此我编写了方法
-(BOOL)resignFirstResponder{NSLog(@“focus get lost”);[TextField1 setHidden:YES];return YES;}
。根据调试器区域,两个方法同时执行。为什么会这样?我如何避免这种情况并正确编码?