【问题标题】:Check if UITextfield is active检查 UITextfield 是否处于活动状态
【发布时间】:2020-01-11 04:30:28
【问题描述】:

问题是“眼睛按钮”只应在选择文本字段时显示。我已经用“isFirstResponder”试过了,但这似乎不起作用。任何想法如何处理这个?在下方的图片中,未选择文本字段。

更新

委托功能“密码确实改变了”工作正常。我唯一需要的是,如果不再选择文本字段,按钮应该隐藏。添加委托函数“beging”或“endEditing”不起作用。如果用户输入内容,取消选择文本字段并再次选择它,它只会导致另一个失败,即文本被删除。

@IBAction func passwordDidChange(_ sender: Any) {
    if self.passwordTextField.text == "" && self.passwordTextField.isFirstResponder != true{
        self.eyeOpenButton.isHidden = true
    }else {
        self.eyeOpenButton.isHidden = false
    }

【问题讨论】:

  • 你可能想改变它并在textFieldDidBeginEditing委托方法中检查它
  • 如何将按钮指定为文本字段的rightView,并将其rightViewMode 设置为whileEditing
  • 之前尝试过,但其中只有一个按钮以某种方式显示。 “vergessen”按钮或“眼睛按钮”..

标签: ios swift uibutton uitextfield


【解决方案1】:

你可以试试这样的。

class ViewController: UIViewController, UITextFieldDelegate {

    @IBOutlet weak var passwordTextField: UITextField!

    override func viewDidLoad() {
        super.viewDidLoad()
        self.eyeOpenButton.isHidden = true
        passwordTextField.delegate = self
    }

    // calls when textfield becomes 1st responder
    func textFieldShouldBeginEditing(_ textField: UITextField) -> Bool {
        switch textField {
        case passwordTextField:

            if passwordTextField.text != "" {
                self.eyeOpenButton.isHidden = !self.eyeOpenButton.isHidden
            } else {
                self.eyeOpenButton.isHidden = !self.eyeOpenButton.isHidden
            }

            break
        default:
            break
        }
        return true
    }

    //Calls when the text fields resigns first responder
    func textFieldShouldEndEditing(_ textField: UITextField) -> Bool {

        if textField == passwordTextField {
            if passwordTextField.text != "" {
                self.eyeOpenButton.isHidden = !self.eyeOpenButton.isHidden
            } else {
                self.eyeOpenButton.isHidden = !self.eyeOpenButton.isHidden
            }
        }
        return true
    }

    // Check all the input user has with the keyboard.
    func textField(_ textField: UITextField, shouldChangeCharactersIn range: NSRange, replacementString string: String) -> Bool {
        if let passwordTextField = passwordTextField {

            if passwordTextField.text?.count ?? 0 > 0 {
                self.eyeOpenButton.isHidden = !self.eyeOpenButton.isHidden
            }

            if passwordTextField.text?.count == 0 {
                 self.eyeOpenButton.isHidden = !self.eyeOpenButton.isHidden
            }
        }

        return true
    }

    func textFieldShouldReturn(_ textField: UITextField) -> Bool {
        for textField in self.view.subviews where textField is UITextField {
            textField.resignFirstResponder()
        }
        return true
    }
}

【讨论】:

  • 我已经尝试过了,但是如果我输入一些内容并且我在我的 AppDelegate 类中收到此错误,则会导致应用程序崩溃:线程 1:信号 SIGABRT
  • 好的,我修复了错误。但是您的解决方案不适合这项工作。该按钮仍然存在,但现在如果我结束编辑并再次开始编辑,文本字段中的文本将被删除:D
  • 你需要做类似self.eyeOpenButton.isHidden = !self.eyeOpenButton.isHidden
  • 在哪里?在每个委托函数中?
  • 也不行。
【解决方案2】:

您需要在UITextfieldDelegate 方法中处理这个问题。实施这些方法并听取变化并采取相应措施。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-12-10
    • 1970-01-01
    • 2013-04-06
    • 1970-01-01
    • 2021-11-28
    • 2012-06-02
    • 2017-12-30
    • 2014-05-24
    相关资源
    最近更新 更多