Ответ 1
Изменение шрифта UITextField не вступает в силу до тех пор, пока вы не установите шрифт на нуль. Попробуйте следующее.
textfieldPassword.font = nil
textfieldPassword.font = UIFont.systemFontOfSize(14.0)
У меня есть UITextField
, который я использую в качестве поля пароля. По умолчанию он установлен secureTextEntry
на true
.
У меня также есть UIButton
для переключения отображения/скрытия пароля.
Когда я изменяю текстовое поле от secureTextEntry
до true
до false
, шрифт становится странным. Кажется, он становится Times New Roman или аналогичным.
Я попытался переустановить шрифт в систему с размером 14, но ничего не изменил.
Пример того, что происходит (с начальным secureTextEntry
установленным на true
):
Мой код:
@IBAction func showHidePwd(sender: AnyObject) {
textfieldPassword.secureTextEntry = !textfieldPassword.secureTextEntry
// Workaround for dot+whitespace problem
if !textfieldPassword.secureTextEntry {
let tempString = textfieldPassword.text
textfieldPassword.text = nil
textfieldPassword.text = tempString
}
textfieldPassword.font = UIFont.systemFontOfSize(14)
if textfieldPassword.secureTextEntry {
showHideButton.setImage(UIImage(named: "EyeClosed"), forState: .Normal)
} else {
showHideButton.setImage(UIImage(named: "EyeOpen"), forState: .Normal)
}
textfieldPassword.becomeFirstResponder()
}
Изменение шрифта UITextField не вступает в силу до тех пор, пока вы не установите шрифт на нуль. Попробуйте следующее.
textfieldPassword.font = nil
textfieldPassword.font = UIFont.systemFontOfSize(14.0)
Я уже сталкивался с этой ошибкой. Не знаю, почему это происходит. Я нашел, что если вы отпустите клавиатуру, а затем переключите secureTextEntry, вы не потеряете стиль шрифта.
textField.resignFirstResponder()
textField.secureTextEntry = !self.textField.secureTextEntry
textField.becomeFirstResponder()
Фактически для решения проблемы я использовал сочетание двух предыдущих ответов.
В моем конкретном случае мое представление содержит только два поля. Итак, я:
С помощью этого метода у меня нет проблем с клавиатурой show/hide, он отлично работает.
С уважением. Себастьен.
BOOL loginTextFieldHadFocus = self.loginTextField.isFirstResponder;
BOOL passwordTextFieldHadFocus = self.passwordTextField.isFirstResponder;
if (self.passwordTextField.isSecureTextEntry)
{
self.passwordTextField.secureTextEntry = NO;
self.passwordTextField.font = nil;
self.passwordTextField.font = [UIFont systemFontOfSize:19.0 weight:UIFontWeightRegular];
[self.passwordTextField resignFirstResponder];
}
else
{
self.passwordTextField.secureTextEntry = YES;
[self.passwordTextField resignFirstResponder];
}
if (loginTextFieldHadFocus)
{
[self.loginTextField becomeFirstResponder];
}
else if (passwordTextFieldHadFocus)
{
[self.passwordTextField becomeFirstResponder];
}
Для swift установите свойство bool для отображения и скрытия пароля после того, как присвойте false из представления метод загрузки, а затем выполните следующий код при нажатии кнопки "Показать/скрыть":
@IBAction func showHidePassword(sender: UIButton) {
showPassword = !showPassword
passwordTxtField.becomeFirstResponder()
if (showPassword == true) {
passwordTxtField.secureTextEntry = false
let password = passwordTxtField.text!
passwordTxtField.attributedText = NSAttributedString(string: password)
}else{
passwordTxtField.secureTextEntry = true
}
sender.setTitle(showPassword == true ? "Hide" : "Show", forState: .Normal)
}
passwordTextField.secureTextEntry = false
let text = passwordTextField.text!
passwordTextField.attributedText = NSAttributedString(string: text)
это работает для меня. Это мы просто назначаем шрифт, используя атрибутную строку. Однако, кажется, небольшой сбой.
Эта ошибка может быть исправлена следующим образом:
[self resignFirstResponder];
NSString *text = self.text;
self.text = @" ";
self.text = text;
//here add some logic
[self becomeFirstResponder];
Включение безопасного ввода текста, настройка шрифта на нуль и возврат к нормальной работе помогли мне:
@objc func toggleSecureTextEntry(_ sender: UIButton) {
isSecureTextEntry = !isSecureTextEntry
updateShowButtonVisual()
if !isSecureTextEntry {
let oldFont = font
font = nil
font = oldFont
}
}