2013-12-18 15 views
19

Museo Sans Rounded 300フォントを使用しているUITextFieldがあります。すべて正常なUITextFieldsで正常に動作しますが、secureTextEntry = YESを設定すると、UITextFieldがフォーカスを失ってフォーカスを失った(つまり、最初のレスポンダになって放棄される)ので、弾丸のサイズが変わってしまいます。カスタムフォントを使用しているときに、secureTextEntryを使用したUITextFieldの箇条書きのサイズがフォーカス切り替え時に変更されます

UITextFieldにフォーカスがあると、箇条書きはカスタムフォントを使用しているように見えますが、フォーカスが失われると、はるかに大きな(標準サイズの)箇条書きに変わります。

+1

私はまったく同じ(イライラする)問題を経験しています。解決策を提供できないという申し訳はありませんが、私は確信しています。 – Luke

+0

私はちょうど別の質問でこれに答えました。ここで自分の答えを確認してください: http://stackoverflow.com/a/20969693/1578927 – Segev

+0

私はhttp://stackoverflow.com/questions/20969451/uitextfield-securetextentry-bullets-with-a-custom-font/20969693#だと思います20969693は最高の答えです。クラスをオーバーライドします。 –

答えて

5

だから、私はこれに対処するために見つけた唯一の方法は、textFieldDidBeginEditingtextFieldDidEndEditingデリゲートメソッドを使用して、テキストフィールドに入力されたものを追跡し、弾丸のマスクと交換し、そしてsecureTextEntryを無効にすることでした。だから、彼らがフィールドを離れるとき、彼らは実際にはセキュリティで保護されたテキストではなく、正しい数の弾丸を見ているだけです。それはハッキーと乱雑ですが、おそらくあなたのために、私のためにやるでしょう。

+3

私はこの問題を解決するためにUITextFieldのカテゴリを作成しました:あなたの答えに基づいて – glyuck

+0

カテゴリにはまだ2つのサイズが表示されますが、少なくともドットはあまり大きくありません –

2

別の回避策:

これはiOSのバグですが(iOSの7にして、新しい、私は追加する必要があります)、私は1つが許容できる見つけるかもしれないと、それを回避する別の方法を持っています。機能性はやや劣化していますが、それほど多くはありません。

基本的には、フィールドに何かが入力されたときはいつでも、フォントをデフォルトのフォントファミリ/スタイルに設定することです。何も入力しなかった場合は、カスタムフォントに設定します。 (フォントサイズは、ファミリ/スタイルであり、サイズではなくバグであるため、単独で残すことができます。)フィールドの値の変更をすべてトラップし、その時にフォントを適切に設定します。何も入力されていないときにかすかな "ヒント"テキストは、あなたが望む(カスタム)フォントを持っています。何かが入力されたとき(あなたが編集しているかどうかに関わらず)、デフォルト(Helvetica)が使用されます。弾丸は弾丸なので、これは上手く見えるはずです。

1つの欠点は、箇条書きで置き換えられる前に入力した文字がデフォルトのフォント(Helvetica)を使用することです。だけど、それは1文字につき1秒間だけです。それが受け入れられるならば、この解決策は機能します。

+0

これは、のためのStackOverflowへ! –

4

私は簡単な解決策を見つけました。 secureTextEntryをyesに設定すると、フォントをカスタムフォントに変更する必要があります。

- (void)textFieldDidBeginEditing:(UITextField *)textField{ 

    if([textField.text isEqual:@"Password"]){ 
     textField.text = @""; 
     textField.font = [UIFont fontWithName:@"Helvetica" size:14.5]; 
     textField.secureTextEntry = YES; 
    } 
} 

- (void)textFieldDidEndEditing:(UITextField *)textField{ 

    if([textField.text isEqual:@""]){ 
     textField.text = @"Password"; 
     textField.secureTextEntry = NO; 
     textField.font = [UIFont fontWithName:@"YourFont" size:14.5]; 
    } 
} 
+0

システムフォントを設定すると 'systemFontOfSize:'は 'fontWithName:size:'より優れているかもしれません。 –

+0

'systemFontOfSize:'はiOS 9では動作しませんでした。なぜそうだが、iOS 9では異なる箇条書きサイズを表示します。 '[UIFont fontWithName :@ "Helvetica" size:pointSize] 'は、iOS 8と9の両方でうまく動作します。 – execv

0

表示/非表示のパスワード切り替えが選択されるたびに呼び出されるメソッドを作成してください。このメソッドの中で、フォントをnilに設定してから、フォントをカスタムフォントとフォントサイズに設定します。また、viewWillAppearメソッドでカスタムフォントとサイズを設定する必要があります。このメソッドの中で、あなたはそれを再設定しています。

この方法で、あなたは(あなたのテキストフィールドが脆弱作ることができる)secureTextEntryを無効にする必要はありません、あなたはtextFieldDidBeginEditingtextFieldDidEndEditingを使用する必要はありません。

コード例:上記

//if the password is obscured and the toggle to show it has been turned on, display password. Else, obscure it. 
- (IBAction)togglePasswordVisibility:(id)sender { 
    // Xcode contains a bug where the font changes to default font if these two lines of code are not included. 
    self.passwordInputTextField.font = nil; 
    self.passwordInputTextField.font = [UIFont fontWithName:@"myCustomFontName" size:myDesiredFontSize]; //set this in viewWillAppear as well! 

    if (self.passwordInputTextField.secureTextEntry == YES) { 
     self.passwordInputTextField.secureTextEntry = NO; 
     [self.showHideButton setTitle:@"HIDE" forState:UIControlStateNormal]; 
    } else { 
     self.passwordInputTextField.secureTextEntry = YES; 
     [self.showHideButton setTitle:@"SHOW" forState:UIControlStateNormal]; 
    } 
} 
1

私はちょうどテスト結果、@Javier Peigneuxの答えは最も簡潔な

#pragma mark -- UITextFieldDelegate 

- (void)textFieldDidBeginEditing:(UCSSafeTF *)safeTF{ 

    safeTF.font = [UIFont fontWithName:@"Helvetica" size:14]; 
} 

- (void)textFieldDidEndEditing:(UCSSafeTF *)safeTF{ 

    safeTF.font = [UIFont fontWithName:@"Helvetica" size:14]; 
} 

は今、私はこのような書き込みで、結果はOKです。アップルのiOS 10がカスタムフォントのサイズを "助け"てくれているからです。希望があなたを助けます。

関連する問題