代码之家  ›  专栏  ›  技术社区  ›  Mina Gerges

当textfield为空时禁用按钮等待其他textfield中的任何更改

  •  0
  • Mina Gerges  · 技术社区  · 8 年前

    如果email或password textfield为空,我想禁用“登录”按钮,并在两者都已填充时再次启用它,因此我使用以下代码:

    func textField(_ textField: UITextField, shouldChangeCharactersIn range: NSRange, replacementString string: String) -> Bool {
        if txtEmail.text != "" , txtPassword.text != "" {
            btnLogInOutlet.isEnabled = true
        }else if txtEmail.text! == "" || txtPassword.text! == "" {
            btnLogInOutlet.isEnabled = false
        }
        return true
    }
    

    当我在两个字段中键入内容,然后删除其中一个字段中键入的内容时,问题就会出现。如下图所示,按钮仍然已启用。它仅当我开始在其他(非空)文本字段中编辑时,才会再次禁用。

    enter image description here

    3 回复  |  直到 8 年前
        1
  •  4
  •   Michał Kwiecień    8 年前

    在从委托返回true之前,您将从textfield获取文本值—这意味着它在更改之前具有旧值。

    而不是使用 shouldChangeCharactersIn

    txtEmail.addTarget(self, action: #selector(textFieldDidChange(textField:)), for: .editingChanged)
    txtPassword.addTarget(self, action: #selector(textFieldDidChange(textField:)), for: .editingChanged)
    

    现在在 textFieldDidChange(textField: UITextField)

    @objc func textFieldDidChange(textField: UITextField) {
       btnLogInOutlet.isEnabled = !txtEmail.text.isEmpty && !txtPassword.text.isEmpty
    }
    
        2
  •  3
  •   Kavitha Madhu    8 年前

    试试这个…先禁用你的登录按钮。。

    override func viewDidLoad() {
            super.viewDidLoad()
            loginbttn.isEnabled = false;
            textfield1.addTarget(self, action:  #selector(textFieldDidChange(_:)),  for:.editingChanged )
            textfield2.addTarget(self, action:  #selector(textFieldDidChange(_:)),  for:.editingChanged )
    
        }
    
     @objc func textFieldDidChange(_ sender: UITextField) {
            if textfield1.text == "" || textfield2.text == "" {
                loginbttn.isEnabled = false;
            }else{
                 loginbttn.isEnabled = true;
            }
        }
    

    快乐编码:)

        3
  •  0
  •   Mahesh Dangar    8 年前
    func textField(_ textField: UITextField, shouldChangeCharactersIn range: NSRange, replacementString string: String) -> Bool {
    
    
        if txtEmail.text != "" && txtPassword.text != "" {
            btnlogin.isEnabled = true
        }else if txtEmail.text! == "" || txtPassword.text! == "" {
            btnlogin.isEnabled = false
    
        }
        return true
    }
    
    
    func textFieldShouldEndEditing(_ textField: UITextField) -> Bool {
    
        if txtEmail.text != "" && txtPassword.text != "" {
            btnlogin.isEnabled = true
        }else if txtEmail.text! == "" || txtPassword.text! == "" {
            btnlogin.isEnabled = false
    
        }
        return true
    
    }
    

    你只需要输入相同的代码 textFieldShouldEndEditing

    推荐文章