如果为空,请始终在 UITextField 中设置“0”,即使在输入内容和 redoing/delete 之后也是如此

Always set "0" in UITextField if empty, even after typing something and redoing/delete

我在 ViewController 中有 5 个文本字段,我想在删除写入的数字后自动将其设置为数字“0”。

在从情节提要中输入数字之前默认设置为“0”(这是正确的)。但在删除书写数字后,文本字段为空。我希望它再次为空时自动设置为“0”。不仅是占位符,还有实际数字。

Before entering numbers

When entering numbers

After entering numbers

让view controller成为text field的delegate,实现如下方法:

extension ViewController: UITextFieldDelegate {
    func textFieldDidChangeSelection(_ textField: UITextField) {
        if textField.text?.isEmpty == true {
            textField.text = "0"
        }
    }

    func textField(_ textField: UITextField, shouldChangeCharactersIn range: NSRange, replacementString string: String) -> Bool {
        if textField.text?.isEmpty == true && string.isEmpty {
            textField.text = "0"
            return false
        } else if textField.text == "0" {
            textField.text = string
            return false
        }
        return true
    }
}

如果用户完全删除文本,文本字段将显示“0”。 如果用户以初始值“0”开始键入,“0”将消失并显示用户键入的文本。

编辑:要将视图控制器设置为文本字段的委托,请右键单击(或 ctrl + 单击)并从文本字段拖动到情节提要中的视图控制器:

并选择代表:

如果您不使用故事板或不想使用它,您可以随时以编程方式进行。

    override func viewDidLoad() {
        super.viewDidLoad()

        textField.delegate = self
    }