UiTextfield- Первая буква должна быть 0 - PullRequest
0 голосов
/ 20 мая 2019

Я использую телефонный номер texfield, теперь я использую этот формат для texfield (#) ### ### ###, теперь проблема в том, что я хочу, чтобы первый символ 0 был обязательным, как этот (0) 959 554545, поэтому пользователь вводит любой первый символ, который должен быть набран 0,

это мой код

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

    let newString = textField.text
    if ((newString == "") && (newString?.count == 0)){
        txtMobileNumber.text = "0"
        return true
    }else if ((newString?.count)! > 0){
        return true
    }
    return false
}

Ответы [ 3 ]

2 голосов
/ 20 мая 2019

В shouldChangeCharactersIn метод UITextFieldDelegate,

func textField(_ textField: UITextField, shouldChangeCharactersIn range: NSRange, replacementString string: String) -> Bool {
    if let text = textField.text {
        let str = (text as NSString).replacingCharacters(in: range, with: string).replacingOccurrences(of: "(0)", with: "")
        if !str.isEmpty {
            textField.text = "(0)" + str
        } else {
            textField.text = nil
        }
    }
    return false
}

Добавлять (0) к вновь созданному string, каждый раз, когда textField редактируется.

1 голос
/ 20 мая 2019

Если вы создаете Enum, вы можете выбрать тип textField и задать свойства расширения для этого поля

func textField(_ textField: UITextField,
                   shouldChangeCharactersIn range: NSRange,
                   replacementString string: String) -> Bool {
        if cellType == .phone {
            guard var sanitizedText = textField.text else { return true }
           if !sanitizedText.isEmpty && !sanitizedText.hasPrefix("(0)") {
              sanitizedText.text = "(0)" + sanitizedText
           }
        }
}
1 голос
/ 20 мая 2019

В shouldChangeCharactersIn метод возвращает false, если число новых строк превышает 15. В противном случае удалите (0) и пробелы, а затем, если строка не пустая, добавьте (0) в начале.Затем разбейте строку на каждые 3 символа и объедините всю строку с пробелом.

func textField(_ textField: UITextField, shouldChangeCharactersIn range: NSRange, replacementString string: String) -> Bool {
    var oldText = (textField.text! as NSString).replacingCharacters(in: range, with: string)
    if oldText.count > 15 { return false }
    oldText = oldText.replacingOccurrences(of: "(0)", with: "").replacingOccurrences(of: " ", with: "")
    if !oldText.isEmpty {
        oldText = "(0)" + oldText
    }
    let newText = String(stride(from: 0, to: oldText.count, by: 3).map {
        let sIndex = String.Index(encodedOffset: $0)
        let eIndex = oldText.index(sIndex, offsetBy: 3, limitedBy: oldText.endIndex) ?? oldText.endIndex
        return String(oldText[sIndex..<eIndex])
        }.joined(separator: " "))
    textField.text = newText
    return false
}

enter image description here

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...