我正在努力使用 Swift 3 来做到这一点。我有一个文本字段,我想将其限制为仅数字和一个小数点以及小数点后两个字符。我还想让它在输入非整数时不使用小数点的区域工作。感谢您的任何建议!
最佳答案
您需要将委托(delegate)分配给您的文本字段,并在 shouldChangeCharactersIn 委托(delegate)方法中进行验证:
为字符串添加带有验证方法的扩展:
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 } }
在您的委托(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/