【问题标题】: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
    }

【问题讨论】:

    标签: ios swift validation uitextfield decimal


    【解决方案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
      
          }
      

      【讨论】:

        猜你喜欢
        • 2017-11-02
        • 1970-01-01
        • 2015-01-18
        • 2019-09-02
        • 1970-01-01
        • 2013-12-19
        • 2017-09-25
        • 2019-12-08
        • 1970-01-01
        相关资源
        最近更新 更多