Comment basculer une entrée de texte sécurisée UITextField (masquer le mot de passe) dans Swift?

j'ai actuellement un UITextfield avec une icône en forme d'oeil qui, lorsqu'elle est pressée, est censée faire basculer l'entrée de texte sécurisée sur et hors tension.

secure text entry

je sais que vous pouvez cocher la case "secure text entry" dans les attributs inspector mais comment le faire pour qu'il bascule chaque fois que l'icône est pressée?

24
demandé sur Paulw11 2016-06-17 07:25:35
la source

18 ответов

utilisez ce code,

iconClick est variable boolean, ou vous avez besoin d'autre condition à vérifier,

var iconClick = true
@IBAction func iconAction(sender: AnyObject) {
        if(iconClick == true) {
            passwordTF.secureTextEntry = false
        } else {
            passwordTF.secureTextEntry = true
        }

        iconClick = !iconClick
    }

j'espère sa utile

35
répondu Iyyappan Ravi 2018-08-02 14:43:22
la source

Pourquoi utiliser un extra var. Dans la méthode de l'action de l' oeil bouton il suffit de faire comme ci-dessous

password.secureTextEntry = !password.secureTextEntry
23
répondu Suryakant 2016-06-17 10:10:52
la source

Un effet secondaire non, c'est que si l'utilisateur bascule à l'insécurité, puis pour sûr, le texte sera effacé si l'utilisateur continue à taper. Le curseur peut aussi se retrouver dans la mauvaise position si nous n'intervenons pas.

ci-dessous est une implémentation qui gère ces cas (Swift 4)

extension UITextField {
    func togglePasswordVisibility() {
        isSecureTextEntry = !isSecureTextEntry

        if let existingText = text, isSecureTextEntry {
            /* When toggling to secure text, all text will be purged if the user 
             continues typing unless we intervene. This is prevented by first 
             deleting the existing text and then recovering the original text. */
            deleteBackward()

            if let textRange = textRange(from: beginningOfDocument, to: endOfDocument) {
                replace(textRange, withText: existingText)
            }
        }

        /* Reset the selected text range since the cursor can end up in the wrong
         position after a toggle because the text might vary in width */
        if let existingSelectedTextRange = selectedTextRange {
            selectedTextRange = nil
            selectedTextRange = existingSelectedTextRange
        }
    }
}

cet extrait utilise le replace(_:withText:) fonction parce qu'elle déclenche le .editingChanged événement, qui se trouve être utile dans mon application. Juste paramètre text = existingText devrait être très bien.

20
répondu zath 2018-09-17 17:12:20
la source

Swift 4 solution

vous n'avez pas besoin de plus si la déclaration pour la propriété simple toggle isSecureTextEntry

func togglePasswordVisibility() {
        password.isSecureTextEntry = !password.isSecureTextEntry
    }

mais il y a un problème quand vous basculez isSecureTextEntry UITextField ne recalcule pas la largeur du texte et nous avons de l'espace supplémentaire à la droite du texte. Pour éviter cela, vous devez remplacer le texte de cette façon

func togglePasswordVisibility() {
        password.isSecureTextEntry = !password.isSecureTextEntry
        if let textRange = password.textRange(from: password.beginningOfDocument, to: password.endOfDocument) {
            password.replace(textRange, withText: password.text!)
        }
    }
9
répondu chibis0v 2018-04-23 22:16:15
la source

pour L'objectif c

set image for Righttbutton In viewdidload Method

[RightButton setImage:[UIImage imageNamed:@"iconEyesOpen"] forState:UIControlStateNormal];

    [RightButton setImage:[UIImage imageNamed:@"iconEyesClose"] forState:UIControlStateSelected];

et ensuite définir la méthode d'action pour ce bouton de droite

-(IBAction)RightButton:(id)sender
{

    if (_rightButton.selected)
    {

        _rightButton.selected = NO;

        _passwordText.secureTextEntry = YES;


        if (_passwordText.isFirstResponder) {
            [_passwordText resignFirstResponder];
            [_passwordText becomeFirstResponder];
        }
    }
    else
    {

      _rightButton.selected = YES;

        _passwordText.secureTextEntry = NO;

        if (_passwordText.isFirstResponder) {
            [_passwordText resignFirstResponder];
            [_passwordText becomeFirstResponder];
        }

    }
}
4
répondu Mad Burea 2016-06-30 16:08:30
la source

Utiliser UITextFiled droite pour afficher les togle buuton

 var rightButton  = UIButton(type: .custom)
 rightButton.frame = CGRect(x:0, y:0, width:30, height:30)
 yourtextfield.rightViewMode = .always
 yourtextfield.rightView = rightButton
4
répondu Phani Sai 2017-04-06 08:06:18
la source

Swift 3

//    MARK: Btn EyeAction
@IBAction func btnEyeAction(_ sender: Any) {

    if(iconClick == true) {
        txtPassword.isSecureTextEntry = false
        iconClick = false
    } else {
        txtPassword.isSecureTextEntry = true
        iconClick = true
    }
}
3
répondu Basir Alam 2017-06-29 13:18:33
la source

Voici votre réponse, pas besoin de prendre de bool var:

@IBAction func showHideAction(sender: AnyObject) {

        if tfPassword.secureTextEntry{
            tfPassword.secureTextEntry = false

        }else{
            tfPassword.secureTextEntry = true;
        } 
    }
1
répondu iVarun 2016-06-17 07:56:55
la source

Swift 3

passwordTF.isSecureTextEntry = true
passwordTF.isSecureTextEntry = false
1
répondu Christopher Larsen 2017-06-12 18:06:12
la source

Dans Swift 4

 var iconClick : Bool!

    override func viewDidLoad() {
        super.viewDidLoad()
        iconClick = true
     }


    @IBAction func showHideAction(_ sender: Any)
    {
        let userPassword = userPasswordTextFiled.text!;

        if(iconClick == true) {
            userPasswordTextFiled.isSecureTextEntry = false
            iconClick = false
        } else {
            userPasswordTextFiled.isSecureTextEntry = true
            iconClick = true
        }

}
1
répondu Keshav Gera 2018-05-03 12:11:41
la source
@IBAction func eye_toggle_clicked(sender: AnyObject)
{
    if toggleBtn.tag == 0
    {
        passwordTxt.secureTextEntry=true
        toggleBtn.tag=1
    }
    else
    {
        passwordTxt.secureTextEntry=false
        toggleBtn.tag=0
    }
}
0
répondu Jayesh Miruliya 2016-06-17 07:33:27
la source

les valeurs D'assignation varient de YES/NOtrue/false valeurs booléennes.

password.secureTextEntry = true //Visible
password.secureTextEntry = false //InVisible

vous pouvez essayer ce code.. je pense que c'est utile.

0
répondu Ravi Dhorajiya 2016-06-17 07:33:38
la source

Comme d'autres l'ont noté, la propriété est secureTextEntry, mais vous ne trouverez pas cela dans le UITextField documentation, car elle est en fait héritée par un UITextField dans UITextInputTraits protocole - https://developer.apple.com/library/ios/documentation/UIKit/Reference/UITextInputTraits_Protocol/#//apple_ref/occ/intfp/UITextInputTraits/secureTextEntry

Vous pouvez simplement changer cette valeur à chaque fois que votre bouton est tapé:

@IBAction func togglePasswordSecurity(sender: UIButton) {
    self.passwordField.secureTextEntry = !self.passwordField.secureTextEntry
}
0
répondu Paulw11 2016-06-17 07:39:11
la source

essayez cette ligne:

@IBAction func btnClick(sender: AnyObject) {
    let btn : UIButton = sender as! UIButton
    if btn.tag == 0{
        btn.tag = 1
        textFieldSecure.secureTextEntry = NO
    }
    else{
        btn.tag = 0
        textFieldSecure.secureTextEntry = NO;
    }
}
0
répondu Bhadresh Kathiriya 2016-06-17 07:44:24
la source

utiliser le bouton avec l'image de l'oeil

et faire buttonHandler méthode

jeu de Tag pour le bouton de valeur 1

-(IBAction) buttonHandlerSecureText:(UIButton *)sender{
      if(sender.tag ==1){
            [self.textField setSecureTextEntry:NO];
            sender.tag = 2;
      }
      else{
            [self.textField setSecureTextEntry:YES];
            sender.tag = 1;
      }
}
0
répondu Yagnesh Dobariya 2017-05-24 10:08:18
la source

tout d'abord, vous devez définir l'image(visible ou cachée) du bouton de l'oeil pour l'état différent (sélectionné ou normal)

que connecter IBAction et écrire du code comme

@IBAction func btnPasswordVisiblityClicked(_ sender: Any) {
        (sender as! UIButton).isSelected = !(sender as! UIButton).isSelected
        if (sender as! UIButton).isSelected {
            txtfPassword.isSecureTextEntry = false
        } else {
            txtfPassword.isSecureTextEntry = true
        }
    }

this is example of "How to set image for different state of button"

0
répondu singh.jitendra 2017-12-06 10:58:25
la source

pour les gens de Xamarin:

passwordField.SecureTextEntry = passwordField.SecureTextEntry ? passwordField.SecureTextEntry = false: passwordField.SecureTextEntry = true;

0
répondu megaKertz 2018-01-05 01:22:32
la source

essayez ce code dans swift 4, essayé de créer un code réutilisable dans un contrôleur. J'ai placé une image différente pour les boutons dans storyboard comme montré dans le lienhttps://stackoverflow.com/a/47669422/8334818

@IBAction func clickedShowPassword(_ sender: UIButton) {
        var textField :UITextField? = nil
        print("btn ",sender.isSelected.description)
        switch sender {
        case encryptOldPswdBtn:
            encryptOldPswdBtn.isSelected = !encryptOldPswdBtn.isSelected
            textField = oldPasswordTextField

        case encryptNewPswdBtn:
            encryptNewPswdBtn.isSelected = !encryptNewPswdBtn.isSelected
            textField = newPasswordTextField

        default:
          break
        }

        print("text ",textField?.isSecureTextEntry.description)
        textField?.isSecureTextEntry = !(textField?.isSecureTextEntry ?? false)

    }
0
répondu Pramod More 2018-04-05 07:52:23
la source

Autres questions sur