Как ограничить текстовое поле, чтобы можно было вводить только десятичные цифры? - PullRequest
3 голосов
/ 28 марта 2019

У меня есть приложение для расчетов навигации 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
    }

Ответы [ 2 ]

1 голос
/ 28 марта 2019

Прежде всего используйте этот метод из ЗДЕСЬ , что

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

0 голосов
/ 28 марта 2019

Используйте этот код: -

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

    }
...