Soru UITextField secureTextEntry geçiş yanlış yazı tipini ayarla


Benim bir UITextField bir şifre alanı olarak kullanıyorum. Varsayılan olarak var secureTextEntry ayarlanır true. Benim de var UIButton şifrenin göster / gizlenmesini değiştirmek için

Metin alanını değiştirdiğimde secureTextEntry ayarlanır true için falseyazı tipi tuhaf olur. Times New Roman ya da benzeri olur.

Yazı tipini 14 boyutunda sisteme yeniden ayarlamayı denedim, ancak hiçbir şey değişmedi.

Ne olduğuyla ilgili örnek (başlangıçta) secureTextEntry ayarlanır true): Example

Kodum:

@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()
}

25
2018-02-09 13:30


Menşei


Kullanarak denediniz mi NSAttributedString güncellemek için? - aramusss
Hayır, yapmadım. Biraz overkill gibi görünüyor = S - Paul Peelen
FWIW, bu iOS 10'dan itibaren sabit görünüyor. - Cyrille


Cevaplar:


UITextField yazı tipini değiştirmek, yazı tipini ilk olarak sıfırlayana kadar etkili olmaz. Takip etmeyi dene.

textfieldPassword.font = nil
textfieldPassword.font = UIFont.systemFontOfSize(14.0)

32
2018-02-09 15:33



Bu aslında benim problemimi çözdü! Teşekkürler. Ancak, yazı tipini başka hiçbir yerde değiştirmediğim için bunu yapmak zorundayım. - Paul Peelen
UIKit'te değiştirilmeden önce yazı tipinin neden ilklendirilmesinin gerektiğini bilen var mı? - Spilly
Bu tam bir saçmalık, bir saatimi harcadım. - CFIFok


Daha önce bu hatayı yaşadım. Neden olduğundan emin değil. Klavyeyi kapatıp sonra secureTextEntry öğesini değiştirirseniz yazı tipi stilini kaybetmezsiniz.

textField.resignFirstResponder()
textField.secureTextEntry = !self.textField.secureTextEntry
textField.becomeFirstResponder()

14
2018-02-11 22:42



Bu benim için kabul edilen cevaptan daha iyi bir çözümdü çünkü güvenli metin giriş noktaları için sistem yazı tipini geçersiz kılmaz. - cargath


Aslında sorunu çözmek için önceki iki yanıtın bir karışımını kullandım.

Benim durumumda, görünümüm sadece iki alan içeriyor. Yani ben :

  • Odağı olan alanı ezberleyin (varsa).
  • Alan "güvenli değil" olarak değişirse, yazı tipini sıfır olarak ayarlayın, yazı tipini orijinal değerine geri döndürün ve metin alanına yeniden Özniteliği Yanıtla'yı işaretleyin.
  • Alan "güvenli" geçiş yaparsa, sadece metin alanındaFirstResponder'ı yeniden işaretlerim.
  • Her durumda, odağı orijinal alana (varsa) geri yüklerim.

Bu yöntemle, show / hide klavye problemi yok, mükemmel çalışıyor.

Saygılarımızla. Sébastien.

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

5
2018-04-14 12:47





Hızlıca, bir Boole özelliğini, gösterme yük yönteminden false atama işleminden sonra parolayı göster ve gizle olarak ayarlayın, ardından Parola Göster / Gizle düğmesini tıklattığınızda aşağıdaki kodu yapın:

    @IBAction func showHidePassword(sender: UIButton) {
    showPassword = !showPassword
    passwordTxtField.becomeFirstResponder()
    if (showPassword == true) {
        passwordTxtField.secureTextEntry = false
        let password = passwordTxtField.text!
        passwordTxtField.attributedText = NSAttributedString(string: password)

    }else{
        passwordTxtField.secureTextEntry = true
    }
    sender.setTitle(showPassword == true ? "Hide" : "Show", forState: .Normal)
}

2
2017-08-08 04:23





passwordTextField.secureTextEntry = false
let text = passwordTextField.text!
passwordTextField.attributedText = NSAttributedString(string: text)

Bu benim için çalışıyor. Bu sadece atfedilen dizgiyi kullanarak yazı tipi atamaktadır. Ancak, küçük bir aksaklık var gibi görünüyor.


0
2018-06-23 07:22





Bu hata şu şekilde düzeltilebilir:

[self resignFirstResponder];
NSString *text = self.text;
self.text = @" ";
self.text = text;

//here add some logic

[self becomeFirstResponder];

0
2017-08-16 08:31





Geçiş güvenli metin girişi, yazı tipini sıfırlamak ve normale döndürmek bana yardımcı oldu:

@objc func toggleSecureTextEntry(_ sender: UIButton) {
    isSecureTextEntry = !isSecureTextEntry
    updateShowButtonVisual()

    if !isSecureTextEntry {
        let oldFont = font
        font = nil
        font = oldFont
    }
}

0
2018-03-06 16:17