在iOS7中更改安全UITextField奇怪行为中的UIFont

edz*_*o27 27 passwords objective-c uitextfield ios ios7

我创建了一个简单的项目:https://github.com/edzio27/textFieldExample.git

我添加两个UITextFields,一个登录,第二个登录安全密码.我注意到有奇怪的行为:

  1. 点击登录并添加一些文字,
  2. 点击密码并添加一些文字,
  3. 再次单击以登录 UITextField

在此输入图像描述

请注意,密码字体大小存在奇怪的行为.它只出现在iOS7中.

可能是什么问题?

谢谢.

Kyl*_*egg 22

正如一对人所指出的那样,安全文本字段似乎并不总能与自定义字体一起使用.我通过使用UITextField UIControlEventEditingChanged监视文本字段的更改并在输入任何内容时将其设置为系统字体(使用正常的项目符号点)来解决此问题,否则使用我的自定义字体.

这允许我继续使用我的自定义字体用于文本字段占位符,并且在输入密码时仍然看起来很好.输入时一次显示的字符将是系统字体,但我没关系.

在viewDidLoad中:

[self.passwordTextField addTarget:self action:@selector(textFieldDidChange:) forControlEvents:UIControlEventEditingChanged];
Run Code Online (Sandbox Code Playgroud)

现在添加一个textFieldDidChange方法:

- (void)textFieldDidChange:(id)sender
{
    UITextField *textField = (UITextField *)sender;

    if (textField == self.passwordTextField) {
        // Set to custom font if the textfield is cleared, else set it to system font
        // This is a workaround because secure text fields don't play well with custom fonts
        if (textField.text.length == 0) {
            textField.font = [UIFont fontWithName:@"OpenSans" size:textField.font.pointSize];
        }
        else {
            textField.font = [UIFont systemFontOfSize:textField.font.pointSize];
        }
    }
}
Run Code Online (Sandbox Code Playgroud)


Gra*_*rks 17

使用自定义字体切换安全/不安全状态:要显示"安全"文本(blob字符),包含blob字符的字体由iOS设置.当您切换到不安全模式时,这是您稍后看到渲染文本的字体.

尽管文本字段保留了您指定的自定义字体,但字段的内容是引用包含blob的字体的属性字符串.

简单的解决方案:写入属性字符串字段,然后重新应用正确的自定义字体.

要关闭安全输入并保留自定义字体:

passwordTextField.secureTextEntry = false

// We have to remove iOS' secure font by setting attributedText.
let pwd = passwordTextField.text!
passwordTextField.attributedText = NSAttributedString(string: pwd)
Run Code Online (Sandbox Code Playgroud)