首页 > 解决方案 > 如果为空,则始终在 UITextField 中设置“0”,即使在输入内容并重做/删除之后也是如此

问题描述

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

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

输入数字之前

输入数字时

输入数字后

标签: swiftxcodeswift5

解决方案


使视图控制器成为文本字段的委托,并实现以下方法:

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
    }

推荐阅读