Поскольку я пытаюсь усвоить код, который использовал в течение многих лет (без особого понимания), я создал свою версию, которая в теории должна копировать его назначение.У меня есть textField, в котором я допускаю только десятичные числа и один период - ".".Однако на данный момент мой textField позволяет вводить любой символ.
Я импортировал класс UITextFieldDelegate, соединил мой UITextField как выход и установил для моего текстового поля значение textFieldDelefate в viewDidLoad.
func textField(_ textField: UITextField, shouldChangeCharactersIn range: NSRange, replacementString string: String) -> Bool {
//characterSet that holds digits
var allowed = CharacterSet.decimalDigits
//initialize the period for use as a characterSet
let period = CharacterSet.init(charactersIn: ".")
//adding these two characterSets together
allowed.formUnion(period)
//all the characters not in the allowed union
let inverted = allowed.inverted
//if latest input is from the characters not allowed is present (aka, empty), do not change the characters in the text range
if string.rangeOfCharacter(from: inverted) != nil
{
return false
}
//if the text already contains a period and the string contains one as well, do not change output
else if (textField.text?.contains("."))! && string.contains(".")
{
return false
}
//however, if not in the inverted set, allow the string to replace latest value in the text
else
{
return true
}
Эта функция не отключает более одного периода и инвертирует десятичные числа.