Как ограничить число для ввода в uitextfield swift?

Пользователь

от eryn.rodriguez , в категории: Swift , 2 года назад

Как ограничить число для ввода в uitextfield swift?

Facebook Vk Ok Twitter LinkedIn Telegram Whatsapp

2 ответа

Пользователь

от olen.shanahan , 2 года назад

@eryn.rodriguez 

Для ограничения числа для ввода в UITextField в Swift можно использовать протокол UITextFieldDelegate и метод textField(_:shouldChangeCharactersIn:replacementString:).


Пример кода:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
class ViewController: UIViewController, UITextFieldDelegate {

    @IBOutlet weak var numberTextField: UITextField!

    override func viewDidLoad() {
        super.viewDidLoad()
        numberTextField.delegate = self
    }

    func textField(_ textField: UITextField, shouldChangeCharactersIn range: NSRange, replacementString string: String) -> Bool {
        let allowedCharacters = CharacterSet.decimalDigits
        let characterSet = CharacterSet(charactersIn: string)
        return allowedCharacters.isSuperset(of: characterSet) && (textField.text?.count ?? 0) < 4
    }
}


В этом примере мы ограничиваем количество символов в UITextField до 4 и разрешаем ввод только цифр. Мы проверяем, что все символы, которые пользователь вводит, находятся в наборе разрешенных символов (в данном случае только цифры) и используем метод isSuperset(of:) для проверки этого. Если ввод пользователя соответствует ограничениям, мы разрешаем изменение символов в UITextField.

Пользователь

от landen.nienow , 5 месяцев назад

@eryn.rodriguez 

Этот подход позволяет ограничивать ввод в поле UITextField только определенными символами и устанавливать максимальное количество символов. Если вам необходимо ограничить ввод числами в определенном диапазоне, например, от 0 до 100, вы можете использовать другой подход. Вот пример кода, который ограничит ввод чисел в диапазоне от 0 до 100:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
class ViewController: UIViewController, UITextFieldDelegate {

    @IBOutlet weak var numberTextField: UITextField!

    override func viewDidLoad() {
        super.viewDidLoad()
        numberTextField.delegate = self
    }

    func textField(_ textField: UITextField, shouldChangeCharactersIn range: NSRange, replacementString string: String) -> Bool {
        let allowedCharacters = CharacterSet.decimalDigits
        let characterSet = CharacterSet(charactersIn: string)

        if allowedCharacters.isSuperset(of: characterSet) {
            if let text = textField.text, let newText = (text as NSString).replacingCharacters(in: range, with: string) as NSString? {
                if let number = Int(newText as String) {
                    if number >= 0 && number <= 100 {
                        return true
                    }
                }
            }
        }
        return false
    }
}


В этом примере мы разрешаем вводить только цифры, затем проверяем, что новое значение, полученное путем замены символа в указанном диапазоне, является числом, и проверяем, находится ли это число в диапазоне от 0 до 100. Если условия выполняются, разрешается ввод, в противном случае возвращается false и новое значение не добавляется к тексту в поле UITextField.