it-swarm.com.de

Wie kann ich eine sichere UITextField-Texteingabe (Passwort ausblenden) in Swift umschalten?

Ich habe derzeit eine UITextfield mit einem Augensymbol, das beim Drücken die sichere Texteingabe ein- und ausschalten soll. 

 secure text entry

Ich weiß, dass Sie das Kontrollkästchen "Sichere Texteingabe" im Attribut-Inspector aktivieren können. Wie wird das Kontrollkästchen aktiviert, wenn das Symbol gedrückt wird?

33
SwiftyJD

Verwenden Sie diesen Code,

iconClick ist eine bool-Variable, oder Sie benötigen eine andere Bedingung.

var iconClick = true

auge Aktionsmethode:

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

        iconClick = !iconClick
    }

hoffe es ist hilfreich

43
Iyyappan Ravi

Warum eine zusätzliche var verwenden? Gehen Sie in der Aktionsmethode der eye - Taste wie folgt vor 

password.secureTextEntry = !password.secureTextEntry

UPDATE 

Swift 4.2 (laut @ROC-Kommentar)

password.isSecureTextEntry.toggle()
28
Suryakant

Ein unbeabsichtigter Nebeneffekt dabei ist, dass der vorhandene Text gelöscht wird, wenn der Benutzer auf unsicher umschaltet und dann back zum Sichern wählt. Der Cursor wird möglicherweise an der falschen Position angezeigt, es sei denn, der ausgewählte Textbereich wird zurückgesetzt.

Nachfolgend finden Sie eine Implementierung, die diese Fälle behandelt (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
        }
    }
}

Dieses Snippet verwendet die Funktion replace(_:withText:), da es das .editingChanged-Ereignis auslöst, das in meiner Anwendung zufällig nützlich ist. Die Einstellung von text = existingText sollte ebenfalls in Ordnung sein.

26
zath

Swift 4 Lösung

Sie benötigen keine zusätzliche if-Anweisung zum einfachen Umschalten der isSecureTextEntry-Eigenschaft

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

Es gibt jedoch ein Problem, wenn Sie isSecureTextEntry umschalten. UITextField berechnet die Textbreite nicht neu und wir haben zusätzlichen Platz rechts neben dem Text. Um dies zu vermeiden, sollten Sie den Text auf diese Weise ersetzen

func togglePasswordVisibility() {
        password.isSecureTextEntry = !password.isSecureTextEntry
        if let textRange = password.textRange(from: password.beginningOfDocument, to: password.endOfDocument) {
            password.replace(textRange, withText: password.text!)
        }
    }

UPDATE

Swift 4.2

Anstatt

password.isSecureTextEntry = !password.isSecureTextEntry

du kannst das 

password.isSecureTextEntry.toggle()
13
chibis0v

Verwenden Sie die rechte Ansicht von UITextField, um die Umschaltfläche anzuzeigen  

 var rightButton  = UIButton(type: .custom)
 rightButton.frame = CGRect(x:0, y:0, width:30, height:30)
 yourtextfield.rightViewMode = .always
 yourtextfield.rightView = rightButton
6
Phani Sai

Für Ziel C  

bild für RightButton In Viewdidload-Methode festlegen

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

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

legen Sie dann die Aktionsmethode für diesen RightButton fest

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

    }
}
5
Mad Burea

Swift 3

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

    if(iconClick == true) {
        txtPassword.isSecureTextEntry = false
        iconClick = false
    } else {
        txtPassword.isSecureTextEntry = true
        iconClick = true
    }
}
4
Basir Alam

Swift 3

passwordTF.isSecureTextEntry = true
passwordTF.isSecureTextEntry = false
2

Hier ist Ihre Antwort, keine Notwendigkeit, bool var zu nehmen:

@IBAction func showHideAction(sender: AnyObject) {

        if tfPassword.secureTextEntry{
            tfPassword.secureTextEntry = false

        }else{
            tfPassword.secureTextEntry = true;
        } 
    }
1
iVarun

Wie bereits erwähnt, ist die Eigenschaft secureTextEntry, aber in der UITextField-Dokumentation finden Sie dies nicht, da sie tatsächlich von einer UITextField über das UITextInputTraits-Protokoll- https://developer.Apple.com/library/ios geerbt wird/documentation/UIKit/Referenz/UITextInputTraits_Protocol/# // Apple_ref/occ/intfp/UITextInputTraits/secureTextEntry

Sie können diesen Wert einfach jedes Mal umschalten, wenn Sie auf die Schaltfläche tippen:

@IBAction func togglePasswordSecurity(sender: UIButton) {
    self.passwordField.secureTextEntry = !self.passwordField.secureTextEntry
}
1
Paulw11

In 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
Keshav Gera

Wenn Sie TextField mit ähnlichen Funktionen an mehreren Stellen benötigen, empfiehlt es sich, die Variable UITextField wie folgt zu unterteilen: 

import UIKit

class UIShowHideTextField: UITextField {

    let rightButton  = UIButton(type: .custom)

    required init?(coder aDecoder: NSCoder) {
        super.init(coder: aDecoder)
        commonInit()
    }

    required override init(frame: CGRect) {
        super.init(frame: frame)
        commonInit()
    }

    func commonInit() {
        rightButton.setImage(UIImage(named: "password_show") , for: .normal)
        rightButton.addTarget(self, action: #selector(toggleShowHide), for: .touchUpInside)
        rightButton.frame = CGRect(x:0, y:0, width:30, height:30)

        rightViewMode = .always
        rightView = rightButton
        isSecureTextEntry = true
    }

    @objc
    func toggleShowHide(button: UIButton) {
        toggle()
    }

    func toggle() {
        isSecureTextEntry = !isSecureTextEntry
        if isSecureTextEntry {
            rightButton.setImage(UIImage(named: "password_show") , for: .normal)
        } else {
            rightButton.setImage(UIImage(named: "password_hide") , for: .normal)
        }
    }

}

Danach können Sie es in jedem ViewController verwenden, 

class ViewController: UIViewController {

    @IBOutlet var textField: UIShowHideTextField!

    override func viewDidLoad() {
        super.viewDidLoad()
        textField.becomeFirstResponder()
    }

}
1
Bishal Ghimire

versuchen Sie diese Zeile:

@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

Taste mit Augenbild verwenden
und machen Sie die buttonHandler-Methode
setze Tag für Button mit Wert 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

Versuchen Sie diesen Code in Swift 4, um einen wiederverwendbaren Code innerhalb eines Controllers zu erstellen. Ich habe ein anderes Bild für die Schaltflächen im Storyboard eingestellt, wie im Link https://stackoverflow.com/a/47669422/8334818 gezeigt.

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

        default:
          break
        }

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

    }
0
Pramod More
@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
Jayesh Miruliya

Zuweisungswerte ändern sich von YES/NO zu true/false booleschen Werten.

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

Sie können diesen Code ausprobieren ... Ich denke, es ist hilfreich.

0
Ravi Dhorajiya
@objc func togglePasscode(){

switch textfield.isSecureTextEntry{
      case true:  textfield.isSecureTextEntry = false 
      case false: textfield.isSecureTextEntry = tree 
}
}

Hier ist eine einfache und besser lesbare Lösung mit der Switch-Anweisung.

0

Kürzeste!

Ich denke, dies ist die kürzeste Lösung für die sichere Eingabe sowie die Aktualisierung des Bilds der Schaltfläche.

@IBAction func toggleSecureEntry(_ sender: UIButton) {
    sender.isSelected = !sender.isSelected
    textfieldPassword.isSecureTextEntry = !sender.isSelected
}

Weisen Sie das Einblenden/Ausblenden der Schaltfläche entsprechend dem ausgewählten Status/der Standardeinstellung zu, ohne dass eine Variable oder ein Ausgang erstellt werden muss.

0
dreamBegin

Zuerst müssen Sie das Bild (sichtbar oder ausgeblendet) des Augenknopfes für einen anderen Zustand (ausgewählt oder normal) einstellen.

dann verbinden Sie IBAction und schreiben Sie Code wie

@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
singh.jitendra

Für Xamarin-Leute:

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

0
megaKertz