菜鸟教程小白 发表于 2022-12-11 21:43:04

ios - 为什么单击按钮时的安全文本输入无法正常工作


                                            <p><p>我正在将一个按钮设置为带有隐藏图标的密码文本字段。在密码中开始编辑时会显示该图标。它是这样给出的......</p>

<pre><code> func textFieldDidBeginEditing(_ textField: UITextField) {

    for textfield in textFields {
      if textfield.tag == 1 {
      textfield.isValid = true      
      } else {
      textfield.isActive = false
      }
    }
}
</code></pre>

<p>当 <code>textfield.isValid = true</code> 时,像这样在另一个类中调用 <code>didSet</code>..</p>

<pre><code>var isValid: Bool = false {
    didSet {
      setCorrectState()
    }
}
</code></pre>

<p><code>setCorrectState()</code> 方法给出为,</p>

<pre><code> func setCorrectState() {

    if self.type == .password {

      addPasswordViewButton()
    }
}
</code></pre>

<p><code>addPasswordViewButton()</code>方法如下……</p>

<pre><code> private func addPasswordViewButton() {

    button.setImage(UIImage(named: &#34;hide&#34;), for: .normal)
    button.setImage(UIImage(named: &#34;show&#34;), for: .selected)
    button.imageEdgeInsets = UIEdgeInsets(top: 0, left: 0, bottom: 0, right: 3)
    button.frame = CGRect(x: 0, y: 0, width: ((self.frame.height)), height: ((self.frame.height)))
    button.addTarget(self, action: #selector(showHidePassword(_:)), for: .touchUpInside)

    self.rightView = button
    self.rightViewMode = .always
}
</code></pre>

<p><code>showHidePassword</code> 给出为,</p>

<pre><code>@objc func showHidePassword(_ button: UIButton) {
    button.isSelected = !button.isSelected
    self.isSecureTextEntry = !button.isSelected

}
</code></pre>

<p>我在这里面临 2 个问题..</p>

<p>1.当我开始在文本字段中输入文本时,会显示隐藏图标,并且输入的文本采用安全文本格式。现在,如果单击隐藏图标,则会显示显示图标,并且输入的文本将不再是安全文本格式。现在处于这种状态本身(显示显示图标的位置),如果我删除所有字符并单击另一个文本字段(除此密码文本字段之外还有多个文本字段),然后再次返回并单击密码文本字段并开始输入字符,显示图标本身显示,而我希望隐藏图标及其功能显示在那里......</p>

<p>2.例如,我在密码文本字段中输入了字符“abc”。这些现在采用安全文本格式。现在显示图标,如果我点击它,我将能够看到输入的字符“abc”。现在如果我输入“def”,我将能够看到字符“abcdef”。现在显示的图标是隐藏图标,如果我单击它,文本“abcdef”将采用安全文本格式。现在,如果我输入字符说“g”,那么理想情况下,不是接受“g”作为“abcdef”的延续,而是将“g”作为新字符输入……即……整个文本“abcdef”都被删除了……什么可能是原因……?</p></p>
                                    <br><hr><h1><strong>Best Answer-推荐答案</ strong></h1><br>
                                            <p><p>按照以下步骤操作:</p>

<p>1 - 创建自定义<strong>类作为 PasswordTextField</strong></p>

<pre><code>class PasswordTextField: UITextField {


}
</code></pre>

<p>2 - 在 PasswordTextField 类中创建 <strong>密码眼睛按钮的导出作为 passwordButton</strong></p>

<pre><code>@IBOutlet weak var passwordButton: UIButton!
</code></pre>

<p>3 - 在 vi​​ewController 上添加 textField 并将 <strong>PasswordTextField 类添加到 storyboard 中的 textField</strong></p>

<p> <a href="/image/RtQmm.png" rel="noreferrer noopener nofollow"><img src="/image/RtQmm.png" alt="enter image description here"/></a> </p>

<p>4 - 从 Storyboard 中添加 <strong>passwordButton 的 IBOutlet 连接</strong>
<a href="/image/wDxSa.png" rel="noreferrer noopener nofollow"><img src="/image/wDxSa.png" alt="enter image description here"/></a> </p>

<p>5 - 创建<strong>一个处理密码显示/隐藏功能的标志</strong></p>

<pre><code>import UIKit

class PasswordTextField: UITextField {

    @IBOutlet weak var passwordButton: UIButton!

    var isClicked: Bool = false {
      didSet {
            self.isSecureTextEntry = isClicked ? false : true
            isClicked ? (passwordButton.setImage(UIImage(named: &#34;show&#34;), for: .normal)) : (passwordButton.setImage(UIImage(named: &#34;hide&#34;), for: .normal))
      }
    }

    override func awakeFromNib() {
      super.awakeFromNib()
      self.isSecureTextEntry = true //set default as a isSecureTextEntry
      passwordButton.setImage(UIImage(named: &#34;hide&#34;), for: .normal) // set image to passoword hide eye
      passwordButton.addTarget(self, action: #selector(passwordButtonPressed(sender:)), for: .touchUpInside) //create target method of passwordButton
    }

    @objc func passwordButtonPressed(sender: UIButton) {

      isClicked = !isClicked

    }
}
</code></pre>

<p>6 - 完成此步骤后,<strong>您无需在 ViewController 中添加任何代码,只需创建 PasswordTextField 导出</strong> </p>

<pre><code>@IBOutlet weak var passwordTextField: PasswordTextField!
</code></pre></p>
                                   
                                                <p style="font-size: 20px;">关于ios - 为什么单击按钮时的安全文本输入无法正常工作,我们在Stack Overflow上找到一个类似的问题:
                                                        <a href="https://stackoverflow.com/questions/54069921/" rel="noreferrer noopener nofollow" style="color: red;">
                                                                https://stackoverflow.com/questions/54069921/
                                                        </a>
                                                </p>
                                       
页: [1]
查看完整版本: ios - 为什么单击按钮时的安全文本输入无法正常工作