Мне нужно добавить гипс в текстовое поле, когда пользователь вводит регистрационный номер автомобиля. например, чтобы сделать это KA-01-BR-1234 в качестве пользовательских типов. Я реализовал метод ниже, но я ищу лучший способ сделать это, если есть. Любые ответы будут полезны. спасибо
![KA01BR1234](https://i.stack.imgur.com/u49no.png)
Я пробовал что-то вроде этого:
func textField(_ textField: UITextField, shouldChangeCharactersIn range: NSRange, replacementString string: String) -> Bool {
if textField.tag == 909090 {
if textField.text!.count > 13 {
return false
}
if range.length == 0 && (range.location == 2 || range.location == 5 || range.location == 8) {
textField.text = "\(textField.text!)-\(string)"
return false
}
return true
}
return true
}
Это не будет работать, если пользователь вводит KA01R1234 (B отсутствует).
![enter image description here](https://i.stack.imgur.com/RQ8Sd.png)
Мой второй подход такой (все еще ужасный, но в настоящее время работает):
extension String {
///Add Hypen for Vehicle Registration No.
func addHypen() -> String {
var finalStr = ""
self.forEach { (charact) in
if let newStr = finalStr.last, (newStr.isLetter && charact.isNumber) || (newStr.isNumber && charact.isLetter) {
finalStr.append("-")
finalStr.append(charact)
} else if !charact.isWhitespace || !charact.isSymbol || !charact.isMathSymbol {
finalStr.append(charact)
}
}
return finalStr.replacingOccurrences(of: "/", with: "-")
}
}
и затем просто вызывая функцию в строке, когда textFieldDidEndEditing
:
textfield.text = textfield.text.addHypen()
Любые лучшие решения, пожалуйста, добро пожаловать!