如何在用户提交 Swift 中的所有文本字段后启用按钮
How to enable button after user filed all the textfields in Swift
我正在做SwiftiOS申请。在那里,我有一些注册屏幕。在那里,我有 3 个文本字段。
我的要求是用户不应该允许双 space,如果文本字段为空,用户也应该被限制为单 space。如果文本字段中甚至有单个字符,用户可以给出单个 space.
但是,一旦所有 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 个字符,则仅启用“完成”按钮。
此外,如果我删除了第 3 个文本字段中的全部文本,它应该会禁用“完成”按钮,但是,在控制台中它会显示最后输入文本的最后一个字符。
这就是我面临的问题。
有什么解决办法吗?
问题是您在编辑时在 textField 完成之前调用了 self.doneButtonEnable()
。意思是你在 self.doneButtonEnable()
行的 func 'shouldChangeCharactersIn' 中输入 's',textField.text 不会在其文本中添加 's'。所以只是延迟这个功能。试试下面的代码:
DispatchQueue.main.asyncAfter(deadline: .now() + 0.1) {
self.doneButtonEnable()
}
我正在做SwiftiOS申请。在那里,我有一些注册屏幕。在那里,我有 3 个文本字段。 我的要求是用户不应该允许双 space,如果文本字段为空,用户也应该被限制为单 space。如果文本字段中甚至有单个字符,用户可以给出单个 space.
但是,一旦所有 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 个字符,则仅启用“完成”按钮。
此外,如果我删除了第 3 个文本字段中的全部文本,它应该会禁用“完成”按钮,但是,在控制台中它会显示最后输入文本的最后一个字符。
这就是我面临的问题。
有什么解决办法吗?
问题是您在编辑时在 textField 完成之前调用了 self.doneButtonEnable()
。意思是你在 self.doneButtonEnable()
行的 func 'shouldChangeCharactersIn' 中输入 's',textField.text 不会在其文本中添加 's'。所以只是延迟这个功能。试试下面的代码:
DispatchQueue.main.asyncAfter(deadline: .now() + 0.1) {
self.doneButtonEnable()
}