如何限制文本字段只能输入十进制数字?

Posted

技术标签:

【中文标题】如何限制文本字段只能输入十进制数字?【英文标题】:How to limit the text field to be able to enter only decimal digits? 【发布时间】:2019-03-28 08:18:05 【问题描述】:

我有用于 Celectial 导航计算的应用程序,我已将代码 textField.text 转换为 Double,但有时如果用户输入“1.0”等字段和“1”等字段,应用程序会崩溃,导致应用程序崩溃,因为可以不要扣除 Int 和 Double,以确保我想限制用户只输入十进制数字“1.0”。对我来说最好的方法是编写类似如果用户在按下完成按钮后自动输入例如“1”,添加“.0”以获得 1.0?

func textField(_ textField: UITextField, shouldChangeCharactersIn range: NSRange, replacementString string: String) -> Bool 
    let allowedCharacters = "-1234567890."
        let allowedCharacterSet = CharacterSet(charactersIn: allowedCharacters)
        let typedCharactersSet = CharacterSet(charactersIn: string)
        return allowedCharacterSet.isSuperset(of: typedCharactersSet)

    




     func TextField(_ textField: UITextField, shouldChangeCharactersIn range: NSRange, replacementString string: String) -> Bool 
        guard let text = latDegTextField.text else  return true 
        let count = text.count + string.count - range.length
        return count == 2
    

【问题讨论】:

【参考方案1】:

首先使用HERE中的这个方法

func textField(_ textField: UITextField, shouldChangeCharactersIn range: NSRange, replacementString string: String) -> Bool 
    if textField.text != "" || string != "" 
        let res = (textField.text ?? "") + string
        return Double(res) != nil
    
    return true

然后在完成按钮操作中添加:

@IBAction func btnDoneTapped(_ sender: Any) 

    print(tf.text)
    guard let obj = Double(tf.text!) else  return 
    print(obj)

当您输入 1 并按下完成按钮时,print(tf.text) 将打印 Optional("1")print(obj) 将打印 1.0

【讨论】:

【参考方案2】:

使用此代码:-

func textField(_ textField: UITextField, shouldChangeCharactersIn range: NSRange, replacementString string: String) -> Bool 
        //Will prevent user from entering space as first character
        let enteredCharString = "\(textField.text ?? "")\(string )"
        if enteredCharString.trimmingCharacters(in: .whitespaces).count == 0 
            return false
        
        switch textField 
        case txt_Ammount:
            if txt_Ammount.text != "" || string != "" 
                let res = (txt_Ammount.text ?? "") + string
                return Double(res) != nil
            
        default:
            true
        



        return true

    

【讨论】:

以上是关于如何限制文本字段只能输入十进制数字?的主要内容,如果未能解决你的问题,请参考以下文章

在 Swift 中将用户输入限制为有效的十进制数

输入时如何将文本字段格式设置为十进制?

如何在文本中输入十进制数

如何在文本框中输入后编辑十进制数

vb中,如何限制输入的文本框的内容只能是数字数或者字母?

kendo数字文本框配置,用于在文本框中输入时仅限制两个十进制值