【问题标题】:Swift UITextField Decimal Field Type - No Pasting, 1 Decimal Point Only and Length LimitSwift UITextField 十进制字段类型 - 无粘贴,仅 1 个小数点和长度限制
【发布时间】:2016-06-01 07:53:58
【问题描述】:

我正在尝试对仅接受十进制值的文本字段进行一些错误检查。这意味着文本字段不能粘贴,用户只能输入1个小数点,我个人的喜好我希望小数点后2个字符的长度限制。

我有当前的代码,它只是限制粘贴:

//Does not allow pasting into text field
    //https://stackoverflow.com/questions/26919854/how-can-i-declare-that-a-text-field-can-only-contain-an-integer
    func textField(textField: UITextField, shouldChangeCharactersInRange range: NSRange, replacementString string: String) -> Bool {

        let invalidCharacters = NSCharacterSet(charactersInString: "0123456789.").invertedSet
        return string.rangeOfCharacterFromSet(invalidCharacters, options: [], range: string.startIndex ..< string.endIndex) == nil

    }

它有效,但我也想要其他功能。我该如何实现这些?

【问题讨论】:

    标签: ios swift validation uitextfield


    【解决方案1】:

    要检查它是否有小数点并限制小数点后 2 位,您可以这样使用:-

     let str = "456.23" // Your Label Value
     let nsStr = NSString(string: str) // Conver label value to NSString
     let strSplit = str.characters.split(".") // split label before decimal point and after decimal point
     if str.containsString(".") {
          //Contains Decimal value
          if String(strSplit.last!).characters.count <= 2 {
             // Contains 2 or 1 decimal values
          } else {
             // More than 2 decimal values
          }
     } else {
         //Do not contains Decimal value
     }
    

    【讨论】:

      【解决方案2】:

      你可以做类似的事情,

       func textField(textField: UITextField, shouldChangeCharactersInRange range: NSRange, replacementString string: String) -> Bool {
      
          var dotLocation = Int()
      
      
      
          let nonNumberSet = NSMutableCharacterSet() //create an empty mutable set
          nonNumberSet.formUnionWithCharacterSet(NSCharacterSet.URLQueryAllowedCharacterSet())
          nonNumberSet.addCharactersInString("0123456789.")
      
      
          //allow backspace
          if range.length == 0 && string.characters.count == 0
          {
              return true
          }
      
      
          if string == "."
          {
              if range.location == 0{
                  return false
              }
              if dotLocation == 0 {
      
                  dotLocation == range.location
                  return true
              }
              else{
      
      
                  return false
              }
      
          }
      
      
          if range.location == dotLocation && string.characters.count == 0{
      
              dotLocation = 0
          }
      
          var newStr = (textField.text! as NSString).stringByReplacingCharactersInRange(range, withString: string)
          newStr = (newStr.componentsSeparatedByCharactersInSet(nonNumberSet) as NSArray).componentsJoinedByString("")
          textField.text = newStr
          return false
      
      }
      

      希望这会有所帮助:)

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2020-07-07
        • 1970-01-01
        • 1970-01-01
        • 2022-08-19
        • 2014-08-31
        • 1970-01-01
        • 2023-03-06
        相关资源
        最近更新 更多