Как переключаться между скрытым и отображаемым паролем в ios?
Есть ли умный способ позволить пользователю переключаться между скрытым и отображаемым паролем в iOS/iphone UITextField, где пользователь может ввести пароль и иметь возможность скрывать его или просматривать.
спасибо заранее.
Ответы
Ответ 1
Просто установка
.secureTextEntry = YES
wont work Я думаю, из-за ошибки (или функции), если textField имеет фокус.
Используйте что-то вроде этого, чтобы заставить его работать, если textField в настоящий момент является первымResponder
-(void) toggleTextFieldSecureEntry: (UITextField*) textField {
BOOL isFirstResponder = textField.isFirstResponder; //store whether textfield is firstResponder
if (isFirstResponder) [textField resignFirstResponder]; //resign first responder if needed, so that setting the attribute to YES works
textField.secureTextEntry = !textField.secureTextEntry; //change the secureText attribute to opposite
if (isFirstResponder) [self.textField becomeFirstResponder]; //give the field focus again, if it was first responder initially
}
Ответ 2
- (IBAction)ShowPass:(UIButton *)sender {
if (self.password.secureTextEntry == YES) {
[ self.showPass setTitle:@"HIDE" forState:(UIControlStateNormal)];
self.password.secureTextEntry = NO;
}
else
{
[ self.showPass setTitle:@"SHOW" forState:(UIControlStateNormal)];
self.password.secureTextEntry = YES;
}
}
Ответ 3
Ответ Марио отлично работает и мне очень помог.
Но если вы используете пользовательский шрифт в текстовом поле, после того, как вы перейдете из защищенной записи в обычный текст, текст текстового поля будет нарисован с неправильным (нестандартным) шрифтом, пока пользователь не введет другой символ.
С небольшим взломом я смог исправить эту проблему, смоделировав этот ввод символов из кода.
Этот модифицированный код Mario должен работать для полей с пользовательскими шрифтами:
- (void)toggleTextFieldSecureEntry:(UITextField *)textField {
BOOL isFirstResponder = textField.isFirstResponder;
if (isFirstResponder) {
[textField resignFirstResponder];
}
textField.secureTextEntry = !textField.secureTextEntry;
if (isFirstResponder) {
[textField becomeFirstResponder];
}
// When using custom font and changing from secure entry to plain text, the text is initially drawn with wrong font
// until a next character is input by user. This hack fixes the font immediatelly (simulate add and delete character)
if (!textField.isSecureTextEntry) {
[textField insertText:@"x"];
[textField deleteBackward];
}
}
Ответ 4
Вы можете использовать свойство secureTextEntry
UITextField
. Если вы хотите скрыть (показать точку для каждого символа), вы можете использовать yourTextField.secureTextEntry=YES;
И когда вы хотите показать использование пароля yourTextField.secureTextEntry=NO;
Ответ 5
Для Swift только значения присваивания изменяются от YES/NO до значений true/false boolean.
password.secureTextEntry = true //Visible
password.secureTextEntry = false //InVisible