gpt4 book ai didi

cocoa - NSTextField输入键检测或firstResponder检测

转载 作者:行者123 更新时间:2023-12-03 16:10:02 27 4
gpt4 key购买 nike

我有两个 NSTextField:textFieldUserIDtextFieldPassword

对于 textFieldPassword,我有一个委托(delegate),如下所示:

- (void)controlTextDidEndEditing:(NSNotification *)aNotification

textFieldPassword 获得焦点并且我按下 Enter 键时,该委托(delegate)将被调用。这正是我想要的。

我的问题是,当 textFieldPassword 具有焦点并且我将焦点移动到 textFieldUserID (通过鼠标或 Tab 键)时,也会调用 controlTextDidEndEditing 。这不是我想要的。

我尝试使用 controlTextDidChange 通知(每次按键都会调用一次),但我无法弄清楚如何检测回车键( [textFieldPassword stringValue] 确实如此不包括回车键)。有人可以帮我解决这个问题吗?

我还尝试检测 textFieldUserID 是否是 firstResponder,但它对我不起作用。这是我尝试过的代码:

if ( [[[self window] firstResponder] isKindOfClass:[NSTextView class]] &&
[[self window] fieldEditor:NO forObject:nil] != nil ) {
NSTextField *field = [[[self window] firstResponder] delegate];
if (field == textFieldUserID) {
// do something based upon first-responder status
NSLog(@"is true");
}
}

我确实需要一些帮助!

最佳答案

如果我理解正确,您可以为密码文本字段设置一个操作,并告诉该字段仅在用户键入 Return 时发送其操作。首先,在负责用户在密码字段上键入 Return 时的行为的类中声明并实现一个操作。例如:

@interface SomeClass …
- (IBAction)returnOnPasswordField:(id)sender;
@end

@implementation SomeClass
- (IBAction)returnOnPasswordField:(id)sender {
// do something
}
@end

使文本字段仅在 Return 上发送其操作,并将操作链接到给定的 IBAction 和目标,可以在 Interface Builder 中或以编程方式完成。

在 Interface Builder 中,使用属性检查器,选择操作:仅在输入时发送,然后将文本字段操作链接到实现它的对象中的 IBAction ,可能是文件的所有者或第一响应者。

如果您更愿意以编程方式执行此操作,那么:

// Make the text field send its action only when Return is pressed
[passwordTextFieldCell setSendsActionOnEndEditing:NO];

// The action selector according to the action defined in SomeClass
[passwordTextFieldCell setAction:@selector(returnOnPasswordField:)];

// someObject is the object that implements the action
[passwordTextFieldCell setTarget:someObject];

关于cocoa - NSTextField输入键检测或firstResponder检测,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6289336/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com