Objective-C / Xcode - 作为用户类型的密码检查

时间:2012-04-20 20:15:06

标签: objective-c events textbox keystroke

我很乐意做一些事情,当用户输入两个文本字段时,可以直观地奖励用户。这是jQuery-esque,我不确定它是否可以在Objective-C / Xcode中使用。这里的关键是“AS THEY TYPE”。当密码/ confirmPassword(主要是因为安全字段格式化•••••)或email / confirmEmail表单字段匹配时,某些基于Web的用户帐户设置表单显示绿色复选框,如果密码丢失,则显示为红色“X”他们的比赛。

在Objective-C / Xcode中是否存在与onKeystroke事件类似的内容?

我愿意研究和学习这一点。我只是不知道如何正确引用这种类型的功能。

3 个答案:

答案 0 :(得分:1)

你想要的一切都在这里https://developer.apple.com/library/mac/#documentation/Cocoa/Conceptual/EventOverview/HandlingKeyEvents/HandlingKeyEvents.html#//apple_ref/doc/uid/10000060i-CH7-SW1

您正在寻找的是在文本视图中实现以下内容并缓冲击键并将其与文本字段进行比较。

- (void)keyUp:(NSEvent *)theEvent

答案 1 :(得分:1)

您可以只观察文本字段的值,并在回调中执行您的逻辑:

[self.textField1 addTarget:self action:@selector(textChanged:) forControlEvents:UIControlEventValueChanged];
[self.textField2 addTarget:self action:@selector(textChanged:) forControlEvents:UIControlEventValueChanged];

- (void)textChanged:(UITextField *)sender
{
    if ([self.textField1.text isEqualToString:self.textField2.text])
    {
        // passwords match
    }
    else
    {
        // passwords don't match
    }
}

答案 2 :(得分:0)

在每个字符后检查可能会消耗过多的Web服务器带宽,请在用户停止输入后1.4秒尝试“计时器”检查。

@property IBOutlet NSSecureTextField *txtPassword;
@property NSThread *syncPasswordTimer;

- (void)awakeFromNib
{
    [super awakeFromNib];

    [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(passwordType) name:NSControlTextDidChangeNotification object:txtPassword];
}

    - (void)passwordType
    {
        [syncPasswordTimer cancel];
        syncPasswordTimer = [[NSThread alloc] initWithTarget:self selector:@selector(passwordTimer) object:nil];
        [syncPasswordTimer start];
    }

    - (void)passwordTimer
    {
        [NSThread sleepForTimeInterval:1.4f];

        if([[NSThread currentThread] isCancelled])
        {
            [NSThread exit];
        }else{
            NSLog(@"'%@'",txtPassword.stringValue);
            //DO THE CHECKING
        }
    }