edzio27 edzio27 - 5 months ago 39
Objective-C Question

Change UIFont in secure UITextField strange behaviour in iOS7

I create a simple project: https://github.com/edzio27/textFieldExample.git

where I add two

UITextField
s, one with login and second one with secure password. I've noticed there strange behaviour:


  1. click on login and add some text,

  2. click on password and add some text,

  3. click again to login
    UITextField



enter image description here

Notice that there is a strange behaviour in password font size. It is only appears in iOS7.

What can be the problem?

Thanks.

Answer

As a couple people pointed out, it appears secure text fields don't always play well with custom fonts. I worked around this by using the UITextField's UIControlEventEditingChanged to monitor for changes to the textfield and set it to the system font (with the normal looking bullet points) when anything is entered, else use my custom font.

This allows me to keep using my custom font for the textfield placeholder and still look good when the password is entered. The characters that show one-at-a-time while being entered will be the system font, but I'm okay with that.

In viewDidLoad:

[self.passwordTextField addTarget:self action:@selector(textFieldDidChange:) forControlEvents:UIControlEventEditingChanged];

Now add a textFieldDidChange method:

- (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];
        }
    }
}
Comments