如何在swift 4中将文本字段输入限制为2位小数?

我有一个文本字段,我想将条目限制为最多2位小数。

允许的数字如12.34但不是12.345

我该怎么做?

将控制器设置为文本字段的委托,并检查建议的字符串是否满足您的要求:

 override func viewDidLoad() { super.viewDidLoad() textField.delegate = self textField.keyboardType = .decimalPad } func textField(_ textField: UITextField, shouldChangeCharactersIn range: NSRange, replacementString string: String) -> Bool { guard let oldText = textField.text, let r = Range(range, in: oldText) else { return true } let newText = oldText.replacingCharacters(in: r, with: string) let isNumeric = newText.isEmpty || (Double(newText) != nil) let numberOfDots = newText.components(separatedBy: ".").count - 1 let numberOfDecimalDigits: Int if let dotIndex = newText.index(of: ".") { numberOfDecimalDigits = newText.distance(from: dotIndex, to: newText.endIndex) - 1 } else { numberOfDecimalDigits = 0 } return isNumeric && numberOfDots <= 1 && numberOfDecimalDigits <= 2 } 

伙计们,这是解决方案:

  func textField(_ textField: UITextField, shouldChangeCharactersIn range: NSRange, replacementString string: String) -> Bool { let dotString = "." if let text = textField.text { let isDeleteKey = string.isEmpty if !isDeleteKey { if text.contains(dotString) { if text.components(separatedBy: dotString)[1].count == 2 { return false } } } } } 
 func textField(_ textField: UITextField, shouldChangeCharactersIn range: NSRange, replacementString string: String) -> Bool { let dotString = "." if let text = textField.text { let isDeleteKey = string.isEmpty if !isDeleteKey { if text.contains(dotString) { if text.components(separatedBy: dotString)[1].count == 2 { return false } } } } return true }