Как отформатировать текстовое поле, чтобы пользователь вводил данные в формате, аналогичном 80/150? - PullRequest
0 голосов
/ 18 декабря 2018

В настоящее время существует текстовое поле, которое после ввода данных пользователем должно публиковаться на сервере в формате, аналогичном 60/500, поэтому в основном это доля.Я знаком с настройкой текстового поля и подключением его через раскадровку, а также настройкой черт ввода текста, чтобы отображалась цифровая клавиатура.Я просто не уверен, как изменить введенное текстовое поле в формат дроби '30 / 90 'и опубликовать его.Любая помощь будет оценена!

1 Ответ

0 голосов
/ 18 декабря 2018

Вы можете сделать это таким образом, указав self в качестве делегата:

let slash = "/"
let digits = CharacterSet(charactersIn: "0123456789")

func textField(_ textField: UITextField, shouldChangeCharactersIn range: NSRange, replacementString string: String) -> Bool {

    //Deleting
    if string.count == 0 {
        var text = textField.text!
        let start = text.startIndex
        let beginRange = text.index(start, offsetBy: range.location)
        let endRange = text.index(start, offsetBy: range.location + range.length)
        text = String(text.prefix(upTo: beginRange))
            + String(text.suffix(from: endRange))
        text = text.replacingOccurrences(of: "/", with: "")
        if text.count >= 3 {
            text = String(text.prefix(2)) + "/" + String(text.dropFirst(2))
        }

        textField.text = text

        return false
    }

    //Typing

    let count = textField.text!.count
    guard string.count == 1,
        count < 6,
        let scalar = Character(string).unicodeScalars.first else {
            return false
    }

    let isDigit = digits.contains(scalar)

    switch count {
    case 0, 3..<6 :
        return isDigit
    case 1:
        if isDigit {
            textField.text = textField.text! + string + "/"
        }
        return false
    case 2:
        if string == slash {
            return true
        } else {
            textField.text = textField.text! + "/" + string
            return false
        }
    default:
        return false
    }
}

Этот код работает и с клавиатурой по умолчанию, а не только с цифровой клавиатурой.

...