Подтвердить что ты не робот

Пароль пользователя UItextfield

Я знаю, что его возможное заставить UITextfield работать в режиме пароля, используя следующее:

textfield.secureTextEntry = YES;

Это изменяет все символы, введенные пользователем в '*'. Однако последний введенный символ вспыхивает примерно на полсекунды. Я понимаю, что это стандартное поведение.

Есть ли способ остановить это и сохранить введенные символы полностью закрытыми?

Чтобы достичь этого, я думаю о подклассе UITextField, а затем переопределяя drawTextInRect:rect

Но я бы приветствовал любые другие предложения.

4b9b3361

Ответ 1

Вы можете сделать это:

  • Установите 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;
}