objective-c - UI文本域密码

标签 objective-c uitextfield

我知道可以使用以下命令使 UITextfield 在密码模式下运行:

textfield.secureTextEntry = YES;

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

有什么方法可以阻止这种情况并使输入的字符完全模糊吗?

为了实现这一点,我正在考虑对 UITextField 进行子类化,然后覆盖 drawTextInRect:rect

但我欢迎任何其他建议。

最佳答案

你可以这样做:

  • 将 UITextField 设置为常规而非 secret 。
  • 监听事件 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;
}

关于objective-c - UI文本域密码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11898093/

相关文章:

iphone - iOS5 数据存储问题。在哪里保存文件?

ios - 键盘横向重叠 TextField

ios - 无法使用调试 View 层次结构

ios - iPhone - AlertView 文本字段使用 iOS6 进行切换

ios - 设置 UITextField 的最大 int 值(不是字符数)

ios - Objective-C : Strange behavior when using NSString and __weak with ARC

ios - Objective-C - iPhone : different DetailViewControllers for TableView?

ios - UITextfield 中的图像的点数有多大

iphone - UITextField 突出显示所有文本

ios - 如何隐藏和取消隐藏 UIAlertView。?