Jak udělat "bezpečné oblasti" v UITextField s SecureTextEntry přepínat?

0

Otázka

Mám problém, přidal jsem secureTextEntry přepnout v mém textu pole, ale text je na přepínací tlačítko.

extension UITextField {
    fileprivate func setPasswordToggleImage(_ button: UIButton) {
        if(isSecureTextEntry){
            button.setImage(UIImage(named: "eye-active"), for: .normal)
        }else{
            button.setImage(UIImage(named: "eye-inactive"), for: .normal)

        }
    }

    func enablePasswordToggle(){
        let button = UIButton(type: .custom)
        setPasswordToggleImage(button)
        button.frame = CGRect(x: CGFloat(self.frame.size.width - 25), y: CGFloat(5), width: CGFloat(25), height: CGFloat(25))
        button.addTarget(self, action: #selector(self.togglePasswordView), for: .touchUpInside)
        self.rightView = button
        self.rightViewMode = .always
    }
    @IBAction func togglePasswordView(_ sender: Any) {
        self.isSecureTextEntry.toggle()
        setPasswordToggleImage(sender as! UIButton)
    }
}

Také mám bug, který klade ikonu v pravé místo místo jsem na mysli a já nevím proč, ale je to 2. ikona

ios swift uikit
2021-11-24 06:44:15
1

Nejlepší odpověď

1

Můžete použít přímo na přidat obrázek a polstrování na vaše UITextField. Může být provedeno z kódu, stejně jako storyboard

// MARK: - UITextField
extension UITextField {
    @IBInspectable var leftPadding: CGFloat {
        get {
            return leftView?.frame.size.width ?? 0.0
        }
        set {
            let frame = CGRect(x: 0, y: 0, width: newValue, height: bounds.size.height)
            leftView = UIView(frame: frame)
            leftViewMode = .always
        }
    }

@IBInspectable var leftImage: UIImage? {
    get {
        let imgView = leftView?.subviews.first(where: {$0 is UIImageView}) as? UIImageView
        return imgView?.image
    }
    set {
        let frame = CGRect(x: 0, y: 0, width: leftPadding, height: bounds.size.height)
        leftView = UIView(frame: frame)
        
        let imgView = UIImageView(frame: frame.insetBy(dx: 4, dy: 4))
        imgView.contentMode = .scaleAspectFit
        leftView?.addSubview(imgView)
        imgView.image = newValue
        leftViewMode = .always
    }
}

@IBInspectable var rightPadding: CGFloat {
    get {
        return rightView?.frame.size.width ?? 0.0
    }
    set {
        let frame = CGRect(x: 0, y: 0, width: newValue, height: bounds.size.height)
        rightView = UIView(frame: frame)
        rightViewMode = .always
    }
}

@IBInspectable var rightImage: UIImage? {
    get {
        let imgView = rightView?.subviews.first(where: {$0 is UIImageView}) as? UIImageView
        return imgView?.image
    }
    set {
        let frame = CGRect(x: 0, y: 0, width: rightPadding, height: bounds.size.height)
        rightView = UIView(frame: frame)
        
        let imgView = UIImageView(frame: frame.insetBy(dx: 4, dy: 4))
        imgView.contentMode = .scaleAspectFit
        rightView?.addSubview(imgView)
        imgView.image = newValue
        rightViewMode = .always
    }
  }  
}
2021-11-24 07:02:09

takže bych měl změnit tlačítko ImageView?
Lucy Shen

No dovolte mi, abych změnit výše uvedené reakce, patří UIButton
udbhateja

stále mám problém, od 3. screenshot. do prázdného textového pole je ikona oka, poté, co jsem stiskněte ji ty ikonu se zobrazí nad předchozí ikonu a celkem mám 2 aktivní ikony
Lucy Shen

nvm, jsem našel problém. děkuji každopádně
Lucy Shen

V jiných jazycích

Tato stránka je v jiných jazycích

Русский
..................................................................................................................
Italiano
..................................................................................................................
Polski
..................................................................................................................
Română
..................................................................................................................
한국어
..................................................................................................................
हिन्दी
..................................................................................................................
Français
..................................................................................................................
Türk
..................................................................................................................
Português
..................................................................................................................
ไทย
..................................................................................................................
中文
..................................................................................................................
Español
..................................................................................................................
Slovenský
..................................................................................................................