Objective c 当子类NSSecureTextField每次获得焦点时,如何引起注意?

Objective c 当子类NSSecureTextField每次获得焦点时,如何引起注意?,objective-c,macos,cocoa,nstextfield,becomefirstresponder,Objective C,Macos,Cocoa,Nstextfield,Becomefirstresponder,我将NSSecureTextField子类化,并将-(BOOL)重写为第一响应者,但只有当我的自定义NSSecureTextField第一次获得焦点时,它才能正常工作。我认为这不是NSSecureTextField的问题。这是一个控件如何聚焦的问题 创建一个新项目,并仅在视图上拖动两个NSSecureTextField。将其中一个的自定义类设置为下面定义的MySecureTextField,并保留另一个默认值。运行项目并在两个NSSecureTextField之间更改焦点,您将看到每次自定义字段

我将
NSSecureTextField
子类化,并将
-(BOOL)重写为第一响应者,但只有当我的自定义
NSSecureTextField
第一次获得焦点时,它才能正常工作。

我认为这不是NSSecureTextField的问题。这是一个控件如何聚焦的问题

创建一个新项目,并仅在视图上拖动两个NSSecureTextField。将其中一个的自定义类设置为下面定义的MySecureTextField,并保留另一个默认值。运行项目并在两个NSSecureTextField之间更改焦点,您将看到每次自定义字段获得焦点时打印的“获取焦点”

回到您的程序,请检查NSSecureTextField是否失去焦点?辞职的第一响应者打电话来了吗

#import "MySecureTextField.h"

@implementation MySecureTextField

- (id)initWithFrame:(NSRect)frame
{
    self = [super initWithFrame:frame];
    if (self) {
        // Initialization code here.
    }

    return self;
}

- (void)drawRect:(NSRect)dirtyRect
{
    // Drawing code here.
}

- (BOOL)becomeFirstResponder
{
    NSLog(@"Get focus");
    return [super becomeFirstResponder];
}
@end

真奇怪!在我的演示程序中。如果您同时覆盖
-(void)textdidediting:
-(BOOL)becomeFirstResponder
,那么
-(BOOL)becomeFirstResponder
只有在MySecureTextField第一次获得焦点且不再被调用时才会被调用。@Gaojin:flashlib的问题是什么?如果您重写
辞职FirstResponder
,是否会调用它?@PeterHosey
-(BOOL)成为FirstResponder
-(BOOL)辞职FirstResponder
将在子类
NSSecureTextField
每次获得焦点的同时被调用。但是,如果我还重写
-(void)textdendediting
,则,奇怪的情况又出现了。@Gaojin:我不知道现场编辑是否相关。它是一个文本视图(严格地说,是某种NSText,不一定是NSTextView),每当字段或字段单元格接收到焦点时,它都会获取焦点。可能与此无关,因为这是一个安全的文本字段,这是一个完全独立的可能原因,但这是一个需要研究的问题。通过重写
becomeFirstResponder
,您试图做什么?