在Swift

时间:2017-11-12 12:20:07

标签: ios swift uitextfield

我设置了一个包含3个文本字段的NIB文件。我想检查字段是否为空。如果不做某事。

我正在使用委托模式来检查字段是否已编辑:

@IBAction func didEditingText(_ sender: UITextField) {

    if self.textInputOne.text != "" {
        delegate?.formIsFilled(delegateCalled: true)
    } else {
        delegate?.formIsFilled(delegateCalled: false)
    }

}

此功能链接到每个字段。当它不再为空时,它将激活一个按钮。但是,当我将该字段留空时,它仍然会使按钮处于活动状态。据我所知,我的if语句正在检查文本输入是不是空字符串,但仍然调用我的其他VC中的委托。我该如何解决这个问题?

2 个答案:

答案 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

正确验证后,您可以使用任何结果调用委托方法。