Дуже конкретні кроки для коду Swift
Ви можете надати логіку, яка обмежує введення текстового поля в func textField(textField: UITextField, shouldChangeCharactersInRange range: NSRange, replacementString string: String) -> Bool
метод, реалізуючи UITextFieldDelegate
протокол.
Для наочності ці кроки передбачають, що ваша розкадровка містить файл контролер перегляду зоб’єктом текстового поля, який повинен приймати лише цифри.
Створіть власний клас для контролера перегляду, який розширюється UIViewController
. Переконайтеся, що сцена у вашій розкадровці посилається на власний клас, встановивши значення спеціального класу в інспекторі ідентифікації 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
' func textField(textField: UITextField, shouldChangeCharactersInRange range: NSRange, replacementString string: String) -> Bool
.
Як результат того, що ваш власний контролер подання став numberField
делегатом 'на попередньому кроці, цей метод буде викликатися кожного разу, коли користувач вводить символ у текстове поле. Якщо ваш метод повертаєтьсяtrue
тоді символ залишиться в текстовому полі. Якщо ваш метод повернеться, false
то символ не залишиться в текстовому полі.
string
Параметр символ , який вводиться користувачем. Якщо string
символ можна перетворити на an, 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
}
}