Очень конкретные шаги для кода Swift
Вы можете предоставить логику, ограничивающую ввод текстового поля в func textField(textField: UITextField, shouldChangeCharactersInRange range: NSRange, replacementString string: String) -> Boolметоде, путем реализации UITextFieldDelegateпротокола.
Для ясности эти шаги предполагают, что ваша раскадровка содержит контроллер представления с объектом текстового поля, который должен принимать только цифры.
Создайте собственный класс для расширяемого контроллера представления UIViewController. Убедитесь, что сцена в вашей раскадровке относится к настраиваемому классу, установив значение настраиваемого класса в Identity Inspector Xcode.
import UIKit
class YourCustomController: UIViewController {
override func viewDidLoad() {
super.viewDidLoad()
}
}
Создайте выход из текстового поля сцены в пользовательский контроллер представления.
class YourCustomController: UIViewController {
@IBOutlet weak var numberField: UITextField!
...
}
Примените UITextFieldDelegateпротокол в своем настраиваемом контроллере представления.
class YourCustomController: UIViewController, UITextFieldDelegate {
...
}
В viewDidLoadметоде вашего настраиваемого контроллера представления назначьте делегата текстового поля вашему классу настраиваемого контроллера представления.
override func viewDidLoad() {
super.viewDidLoad()
numberField.delegate = self
}
Добавить в UITextFieldDelegate«S func textField(textField: UITextField, shouldChangeCharactersInRange range: NSRange, replacementString string: String) -> Boolметод.
В результате того, что ваш пользовательский контроллер представления стал numberFieldделегатом на предыдущем шаге, этот метод будет вызываться каждый раз, когда пользователь вводит символ в текстовое поле. Если ваш метод вернется, trueто символ останется в текстовом поле. Если ваш метод вернется, falseто символ не останется в текстовом поле.
stringПараметр символ , который вводится пользователем. Если stringсимвол можно преобразовать в, Intто он находится в диапазоне от 0 до 9; в противном случае это нечисловой символ.
class YourCustomController: UIViewController, UITextFieldDelegate {
...
func textField(textField: UITextField, shouldChangeCharactersInRange range: NSRange, replacementString string: String) -> Bool {
return Int(string) != nil
}
}
(См. Ниже полный код контроллера.)
Пример контроллера представления с текстовым полем только для цифр
import UIKit
class YourCustomController: UIViewController, UITextFieldDelegate {
@IBOutlet weak var numberField: UITextField!
override func viewDidLoad() {
super.viewDidLoad()
numberField.delegate = self
}
func textField(textField: UITextField, shouldChangeCharactersInRange range: NSRange, replacementString string: String) -> Bool {
return Int(string) != nil
}
}
Пример контроллера представления с десятичным текстовым полем
Если вы хотите поддерживать десятичное число, воспользуйтесь NSNumberFormatter. См. Комментарии к коду, чтобы узнать о различиях.
import UIKit
class YourCustomController: UIViewController, UITextFieldDelegate {
@IBOutlet weak var numberField: UITextField!
private var formatter: NSNumberFormatter!
override func viewDidLoad() {
super.viewDidLoad()
numberField.delegate = self
formatter = NSNumberFormatter()
formatter.numberStyle = NSNumberFormatterStyle.DecimalStyle
formatter.minimum = 0
}
func textField(textField: UITextField, shouldChangeCharactersInRange range: NSRange, replacementString string: String) -> Bool {
return formatter.numberFromString("\(textField.text)\(string)") != nil
}
}