Очень конкретные шаги для кода 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
}
}