我有两个NSTextField
:textFieldUserID
和textFieldPassword
.
因为textFieldPassword
,我有一个代表如下:
- (void)controlTextDidEndEditing:(NSNotification *)aNotification
Run Code Online (Sandbox Code Playgroud)
textFieldPassword
有焦点时我会调用此委托,然后按Enter键.这正是我想要的.
我的问题是,controlTextDidEndEditing
当textFieldPassword
有焦点时我也会被调用,并且我将焦点移动到textFieldUserID
(通过鼠标或制表键).这不是我想要的.
我尝试使用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");
}
}
Run Code Online (Sandbox Code Playgroud)
我肯定可以在这里使用一些帮助!
小智 14
如果我理解正确,您可以为密码文本字段设置操作,并告诉字段仅在用户键入时发送其操作Return.首先,在用户键入Return密码字段时,在类中声明并实现一个负责行为的操作.例如:
@interface SomeClass …
- (IBAction)returnOnPasswordField:(id)sender;
@end
@implementation SomeClass
- (IBAction)returnOnPasswordField:(id)sender {
// do something
}
@end
Run Code Online (Sandbox Code Playgroud)
使文本字段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];
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
4200 次 |
最近记录: |