UItextfield密码

时间:2012-08-10 08:37:11

标签: objective-c uitextfield

我知道可以通过使用以下方法使UITextfield在密码模式下运行:

textfield.secureTextEntry = YES;

这会将用户输入的所有字符更改为“*”。但是,输入的最后一个字符闪烁了大约半秒钟。我知道这是标准行为。

有没有办法阻止这种情况并保持输入的字符完全模糊不清?

为实现这一目标,我想要继承UITextField,然后重写drawTextInRect:rect

但我欢迎任何其他建议。

1 个答案:

答案 0 :(得分:3)

你可以这样做:

  • 将UITextField设置为常规,而非秘密。
  • 收听活动UITextFieldTextDidChangeNotification
  • 如果发生这种情况,请将文本字段中的字符替换为“*”,并将真实密码存储在属性中。

这段代码很有用,但它很可能是优化的。

- (void)viewDidLoad
{
    [super viewDidLoad];

    [[NSNotificationCenter defaultCenter] addObserver: self selector: @selector(keyPressed:) name: UITextFieldTextDidChangeNotification object: nil];
}

- (void) keyPressed: (NSNotification *) notification {
    if(!self.password)
        self.password = @"";

    NSString* fieldText = [notification.object valueForKey:@"text"];
    NSString* lastChar = [fieldText substringFromIndex:fieldText.length-1];

    if(self.password.length>fieldText.length)
        self.password = [self.password substringToIndex:self.password.length-1];
    else
        self.password = [NSString stringWithFormat:@"%@%@", self.password, lastChar];

    NSString* secret = @"";
    for (int l = 0; l<self.password.length; l++) {
        secret = [secret stringByAppendingString:@"*"];
    }
    self.textField.text = secret;
}