简体   繁体   中英

Change right icon image UITextField

I am trying to change between rightView UIImages that are added as a subView to my UITextfield. When a user taps the icon it should show or hide the inserted password and change the UIImage depending on the state.

How am I able to edit the code below to achieve this?

Code:

// Show eye icon to show the password
    func textFieldDidChange() {
        if passwordField.text != "" {
            let leftImageView = UIImageView()
            leftImageView.image = UIImage(named: "view_password")
            leftImageView.contentMode = .scaleAspectFit

            let leftView = UIView()
            leftView.addSubview(leftImageView)

            leftView.frame = CGRect(x: 0, y: 0, width: 40, height: 30)
            leftImageView.frame = CGRect(x: 10, y: 10, width: 20, height: 12)

            passwordField.rightViewMode = .whileEditing
            passwordField.rightView = leftView

            let tapgesture = UITapGestureRecognizer(target: self, action: #selector(ViewController.togglePasswordSecurity))
            leftImageView.isUserInteractionEnabled = true
            leftImageView.addGestureRecognizer(tapgesture)

        }else{
            passwordField.rightViewMode = .never
        }
    }


    func togglePasswordSecurity(imageView: UIImageView) {

        if passwordField.isSecureTextEntry == false {

            // change left UIImage to hide_password
            passwordField.isSecureTextEntry = true
        }else{

            // change left UIImage to view_password
            passwordField.isSecureTextEntry = false
        }
    }

Thanks a lot!

Have you tried adding a tag to each of your images? For example:

let leftImageView = UIImageView()
leftImageView.image = UIImage(named: "view_password")
leftImageView.contentMode = .scaleAspectFit
leftImageView.tag = 1

Then, to change that image you can write:

let myImage = UIView(withTag: 1) as! UIImageView
myImage.image = ...

EDIT: To toggle between 2 images, just change this: func togglePasswordSecurity(imageView: UIImageView) {

    if passwordField.isSecureTextEntry == false {

        let myImage = UIView(withTag: 1) as! UIImageView
        myImage.image = YOUR_IMAGE_1
        // change left UIImage to hide_password
        passwordField.isSecureTextEntry = true
    }else{

        let myImage = UIView(withTag: 1) as! UIImageView
        myImage.image = YOUR_IMAGE_2
        // change left UIImage to view_password
        passwordField.isSecureTextEntry = false
    }
}

Solution:

// Show eye icon to show the password will be triggered once there is a change in data in the UITextField
    func textFieldDidChange() {
        if passwordField.text != "" {
            let leftImageView = UIImageView()
            leftImageView.image = passwordImage
            leftImageView.contentMode = .scaleAspectFit
            leftImageView.tag = 1

            let leftView = UIView()
            leftView.addSubview(leftImageView)

            leftView.frame = CGRect(x: 0, y: 0, width: 40, height: 30)
            leftImageView.frame = CGRect(x: 10, y: 10, width: 20, height: 12)

            passwordField.rightViewMode = .whileEditing
            passwordField.rightView = leftView

            let tapgesture = UITapGestureRecognizer(target: self, action: #selector(ViewController.togglePasswordSecurity))
            leftImageView.isUserInteractionEnabled = true
            leftImageView.addGestureRecognizer(tapgesture)

        }else{
            passwordField.rightViewMode = .never
        }
    }


    func togglePasswordSecurity() {

        if passwordField.isSecureTextEntry == false {

            passwordImage = UIImage(named: "view_password")
            textFieldDidChange()

            // change left UIImage to hide_password
            passwordField.isSecureTextEntry = true
        }else{

            passwordImage = UIImage(named: "heart")
            self.textFieldDidChange()
            // change left UIImage to view_password
            passwordField.isSecureTextEntry = false
        }
    }

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM