ios - 将文本字段限制为一位小数点输入,仅限数字,以及小数点后两个字符 - Swift 3

标签 ios swift swift3

我正在努力使用 Swift 3 来做到这一点。我有一个文本字段,我想将其限制为仅数字和一个小数点以及小数点后两个字符。我还想让它在输入非整数时不使用小数点的区域工作。感谢您的任何建议!

最佳答案

您需要将委托(delegate)分配给您的文本字段,并在 shouldChangeCharactersIn 委托(delegate)方法中进行验证:

  1. 为字符串添加带有验证方法的扩展:

    extension String{
    
        private static let decimalFormatter:NumberFormatter = {
            let formatter = NumberFormatter()
            formatter.allowsFloats = true
            return formatter
        }()
    
        private var decimalSeparator:String{
            return String.decimalFormatter.decimalSeparator ?? "."
        }
    
        func isValidDecimal(maximumFractionDigits:Int)->Bool{
    
            // Depends on you if you consider empty string as valid number
            guard self.isEmpty == false else {
                return true
            }
    
            // Check if valid decimal
            if let _ = String.decimalFormatter.number(from: self){
    
                // Get fraction digits part using separator
                let numberComponents = self.components(separatedBy: decimalSeparator)
                let fractionDigits = numberComponents.count == 2 ? numberComponents.last ?? "" : ""
                return fractionDigits.characters.count <= maximumFractionDigits
            }
    
            return false
        }
    
    }
    
  2. 在您的委托(delegate)方法中:

    func textField(_ textField: UITextField, shouldChangeCharactersIn range: NSRange, replacementString string: String) -> Bool {
    
        // Get text
        let currentText = textField.text ?? ""
        let replacementText = (currentText as NSString).replacingCharacters(in: range, with: string)
    
        // Validate
        return replacementText.isValidDecimal(maximumFractionDigits: 2)
    
    }
    

关于ios - 将文本字段限制为一位小数点输入,仅限数字,以及小数点后两个字符 - Swift 3,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39807386/

相关文章:

ios - 如何将日期转换为\/Date(1440156888750-0700)\/到 Swift 可以处理的内容?

ios - 向 Xcode Interface Builder 添加自定义调色板

ios - AVPreviewLayer 内容重力未填充图层

arrays - 在for循环中将多个对象添加到swift数组

ios - 在静态 tableView 的底部设置按钮

swift - 在 Swift 3 中单击和双击 UITableViewCell

ios - 避免创建多个 ViewController 实例,iOS Swift

ios - SWIFT 中的元组数组作为函数的参数

ios - Swift - 数组过滤器不删除对象

ios - 如何将原始图像显示为 UIToolbar 上的条形按钮项?