用户在 Swift 中提交所有文本字段后如何启用按钮

Posted

技术标签:

【中文标题】用户在 Swift 中提交所有文本字段后如何启用按钮【英文标题】:How to enable button after user filed all the textfields in Swift 【发布时间】:2020-05-07 09:43:36 【问题描述】:

我正在做 Swift ios 应用程序。在那,我有一些注册屏幕。在那,我有 3 个文本字段。 我的要求是用户不应该允许双空格,如果文本字段为空,用户也应该被限制为单个空格。如果文本字段中有单个字符,用户可以给单个空格。

但是,一旦所有 3 个文本字段都填满,那么只有我必须启用 完成 按钮,但即使单个文本字段是空的,我也必须禁用该完成按钮。

 func textField(_ textField: UITextField, shouldChangeCharactersIn range: NSRange, replacementString string: String) -> Bool 

        let rawString = string
        let range = rawString.rangeOfCharacter(from: .whitespaces)
        if ((textField.text?.count)! == 0 && range  != nil)
            || ((textField.text?.count)! > 0 && textField.text?.last  == " " && range != nil)  
            return false
        

        self.doneButtonEnable()
        return true
    

  func doneButtonEnable()  
      if ((firstNameTextField.text!.count > 0) && (lastNameTextField.text!.count > 0) && (displayNameTextField.text!.count > 0)) 
          doneButtonAppearance(appearance: true)
          doneButton.setBackgroundImage(UIImage(named:"image_enable"), for: .normal)
       else 
          doneButtonAppearance(appearance: false)
          doneButton.setBackgroundImage(UIImage(named:"image_disabled"), for: .normal)
      
  

问题是,如果我在所有 3 个文本字段中输入单个字符,每个文本字段有 1 个字符,按钮仍显示禁用,如果我在最后一个文本字段中输入 2 个字符,则仅启用完成按钮。

此外,如果我删除了第三个文本字段中的全部文本,它应该禁用完成按钮,但是,在控制台中它显示最后输入文本的最后一个字符。

这是我面临的问题。

有什么解决办法吗?

【问题讨论】:

为什么返回 false ? @jawadAli 在哪里? shouldChangeCharactersIn函数... 如果没有文本,我将禁用单双空格,如果有任何文本,启用单文本并禁用双空格。 那么您面临什么问题? 【参考方案1】:

问题是您在编辑时在 textField 完成之前调用 self.doneButtonEnable()。意味着您在 self.doneButtonEnable() 行的 func 'shouldChangeCharactersIn' 中输入 's',textField.text 不会在其文本中添加 's'。所以只是延迟这个功能。试试下面的代码:

DispatchQueue.main.asyncAfter(deadline: .now() + 0.1) 
     self.doneButtonEnable()

【讨论】:

完美!!非常感谢!!

以上是关于用户在 Swift 中提交所有文本字段后如何启用按钮的主要内容,如果未能解决你的问题,请参考以下文章

仅当所有文本字段都已填写时才在 Swift 中启用按钮

IOS swift - 如何在点击文本字段时打开新视图控制器后结束文本字段中的编辑

如何在 swift 中使文本字段功能在 tableview 中

如何在 Swift 中一一显示 UITextField?

如何从 Swift 中嵌入 UITableView 的文本字段中检索数据?

当所有字段都被填写后,启用提交按钮