27

簡単なプロジェクトを作成します: https://github.com/edzio27/textFieldExample.git

ここで、2 つの s を追加UITextFieldします。1 つはログイン用、もう 1 つは安全なパスワード用です。私は奇妙な振る舞いに気づきました:

  1. ログインをクリックしてテキストを追加し、
  2. パスワードをクリックしてテキストを追加し、
  3. もう一度クリックしてログインUITextField

ここに画像の説明を入力

パスワードのフォント サイズに奇妙な動作があることに注意してください。iOS7でのみ表示されます。

何が問題になる可能性がありますか?

ありがとう。

4

5 に答える 5

22

何人かが指摘したように、安全なテキスト フィールドはカスタム フォントで常にうまく機能するとは限りません。UITextFieldを使用してテキストUIControlEventEditingChangedフィールドへの変更を監視し、何かが入力されたときにシステムフォント(通常の箇条書き)に設定することでこれを回避し、それ以外の場合はカスタムフォントを使用しました。

これにより、テキスト フィールドのプレースホルダーにカスタム フォントを使用し続けることができ、パスワードが入力されたときに見栄えがよくなります。入力中に一文字づつ表示される文字はシステムフォントになりますが、私はそれでいいです。

ビューでDidLoad:

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

ここで、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];
        }
    }
}
于 2014-02-10T06:09:34.373 に答える
17

カスタム フォントでセキュア/非セキュア状態を切り替える: 「セキュアな」テキスト (ブロブ文字) を表示するために、ブロブ文字を含むフォントが iOS によって設定されます。これは、後で安全でないモードに切り替えたときに表示されるテキストのフォントです。

テキスト フィールドは割り当てられたカスタム フォントを保持しますが、フィールドのコンテンツは、blob を含むフォントを参照する属性付きの文字列です。

簡単な解決策: 属性付きの文字列フィールドに書き込むと、正しいカスタム フォントが再適用されます。

セキュリティで保護されたエントリを無効にしてカスタム フォントを保持するには:

passwordTextField.secureTextEntry = false

// We have to remove iOS' secure font by setting attributedText.
let pwd = passwordTextField.text!
passwordTextField.attributedText = NSAttributedString(string: pwd)
于 2016-03-14T21:17:00.917 に答える
4

パスワードフィールドで「Adjust to Fit」をオフにすると、レスポンダーを辞任したときにサイズ変更が停止します。

于 2013-10-20T10:18:58.543 に答える
1

TextField のデリゲートを設定し、これを追加します。

- (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string {
    if (!textField.secureTextEntry) {
        return YES;
    }

    textField.text = [textField.text stringByReplacingCharactersInRange:range withString:string];

    if (textField.text.length > 0) {
        textField.font = [UIFont systemFontOfSize:18.0f];
    } else {
        textField.font = [UIFont fontWithName:@"YourFont" size:18.0f];
    }

    return NO;
}
于 2014-08-12T08:20:53.227 に答える
0

これを確認してください: UITextField secureTextEntry bullets with a custom font?

私が気に入ったglyuckによるエレガントなソリューションがあります。 http://github.com/elegion/ELFixSecureTextFieldFont UITextField にカテゴリを作成しました。ドットを適切に表示するには、ELFixSecureTextFieldFont.h および .m ファイルをインクルードしてから、次のように textField で - (void)fixSecureTextFieldFont を呼び出す必要があります。

[yourCustomSecureTextField fixSecureTextFieldFont];

それだ。

于 2014-04-23T14:52:11.613 に答える