【问题标题】:How to make "safe area" in UITextField with SecureTextEntry toggle?如何使用 SecureTextEntry 切换在 UITextField 中创建“安全区域”?
【发布时间】:2021-11-24 06:44:15
【问题描述】:

我有一个问题,我在我的文本字段中添加了secureTextEntry 切换,但文本在切换按钮上。

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

还有一个错误,我的图标放在最右边,而不是我的意思,我不知道为什么,但它是第二个图标

【问题讨论】:

    标签: ios swift uikit


    【解决方案1】:

    您可以直接使用它来为您的 UITextField 添加图像和填充。可以从代码和情节提要中完成

    // 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
        }
      }  
    }
    

    【讨论】:

    • 所以我应该将按钮更改为 ImageView?
    • 不让我修改上面的响应以包含 UIButton
    • 我仍然遇到第三张截图的问题。在空的文本字段中,它是一个眼睛图标,在我按下它后,一个图标出现在上一个图标上方,我总共有 2 个活动图标
    • nvm,我发现了一个问题。还是谢谢你
    猜你喜欢
    • 2012-12-22
    • 2017-02-27
    • 2016-10-18
    • 2019-01-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多