UITextField secureTextEntry切换设置不正确的字体

Pau*_*len 26 uitextfield ios swift

我有一个UITextField用作密码字段的.它默认secureTextEntry设置为true.我还要UIButton切换密码的显示/隐藏.

当我将文本字段从secureTextEntryset 更改为trueto时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()
}
Run Code Online (Sandbox Code Playgroud)

小智 33

在首次将字体设置为nil之前,更改UITextField的字体不会生效.试试以下.

textfieldPassword.font = nil
textfieldPassword.font = UIFont.systemFontOfSize(14.0)
Run Code Online (Sandbox Code Playgroud)


小智 14

我之前遇到过这个错误.不知道为什么会这样.我发现如果您关闭键盘然后切换secureTextEntry,您将不会丢失字体样式.

textField.resignFirstResponder()
textField.secureTextEntry = !self.textField.secureTextEntry
textField.becomeFirstResponder()
Run Code Online (Sandbox Code Playgroud)

  • 对于我来说,这比接受的答案更好,因为它不会覆盖安全文本输入点的系统字体. (2认同)

Séb*_*ien 5

事实上,为了解决这个问题,我使用了前两个响应的混合.

在我的特定情况下,我的视图只包含两个字段.所以我 :

  • 记住具有焦点的领域(如果有的话).
  • 如果字段切换为"不安全",我将字体设置为nil,将字体设置回原始值,并将resignFirstResponder设置为文本字段.
  • 如果字段切换"安全",我只是在文本字段上resignFirstResponder.
  • 在所有情况下,我将焦点恢复到原始字段(如果有).

使用这种方法,我没有显示/隐藏键盘的问题,它完美地工作.

问候.塞巴斯蒂安.

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];
}
Run Code Online (Sandbox Code Playgroud)