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



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

但是,一旦所有3个文本字段都被填充,那么只有我需要启用Done按钮,但即使单个文本字段为空,我也必须禁用该Done按钮。

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个字符,则只有"完成"按钮启用。

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

这就是我面临的问题。

有什么解决方案吗?

问题是在编辑textField之前调用self.doneButtonEnable()。意味着在self.doneButtonEnable()行的函数"shouldChangeCharactersIn"中输入了"s",textField.text没有将"s"添加到其文本中。所以只要延迟这个函数。尝试以下代码:

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

最新更新