我设置了一个包含3个文本字段的NIB文件。我想检查字段是否为空。如果不做某事。
我正在使用委托模式来检查字段是否已编辑:
@IBAction func didEditingText(_ sender: UITextField) {
if self.textInputOne.text != "" {
delegate?.formIsFilled(delegateCalled: true)
} else {
delegate?.formIsFilled(delegateCalled: false)
}
}
此功能链接到每个字段。当它不再为空时,它将激活一个按钮。但是,当我将该字段留空时,它仍然会使按钮处于活动状态。据我所知,我的if语句正在检查文本输入是不是空字符串,但仍然调用我的其他VC中的委托。我该如何解决这个问题?
答案 0 :(得分:1)
在if条件下,您只检查三个字段中的一个(self.textInputOne.text != ""
)。由于三个字段连接到同一个函数,您需要更改条件,如下所示:
@IBAction func didEditingText(_ sender: UITextField) {
if sender.text != "" { // You can use !sender.text.isEmpty too
delegate?.formIsFilled(delegateCalled: true)
} else {
delegate?.formIsFilled(delegateCalled: false)
}
}
这样,当您完成字段编辑后,该函数将检查该字段是否为空并调用您的代理。
答案 1 :(得分:1)
如果您有多个文本字段,最好在同一时间/功能中检查所有文本字段:
func validation() -> Bool {
for tf in [textFieldFirst, textFieldSecond, textFieldThird] {
guard let text = tf?.text, !text.isEmpty else { return false }
}
return true
}
之前描述的功能,您可以在UITextFieldDelegate
func textFieldDidEndEditing(_ textField: UITextField) {
button.isEnabled = validation()
}
您可以在viewDidLoad()
或视图初始化后检查您的验证:
override func viewDidLoad() {
super.viewDidLoad()
button.isEnabled = validation()
}
项目示例,您可以查看in the link。
正确验证后,您可以使用任何结果调用委托方法。