Bardzo specyficzne kroki dla kodu Swift
Możesz zapewnić logikę ograniczającą dane wejściowe pola tekstowego w func textField(textField: UITextField, shouldChangeCharactersInRange range: NSRange, replacementString string: String) -> Bool
metodzie, implementując UITextFieldDelegate
protokół.
Dla jasności w tych krokach założono, że scenorys zawiera kontroler widoku z obiektem pola tekstowego, który powinien akceptować tylko cyfry.
Utwórz klasę niestandardową dla kontrolera widoku, który rozszerza UIViewController
. Upewnij się, że scena w serii ujęć odnosi się do klasy niestandardowej, ustawiając wartość klasy niestandardowej w Inspektorze tożsamości Xcode.
import UIKit
class YourCustomController: UIViewController {
override func viewDidLoad() {
super.viewDidLoad()
}
}
Utwórz wylot z pola tekstowego sceny do własnego kontrolera widoku.
class YourCustomController: UIViewController {
@IBOutlet weak var numberField: UITextField!
...
}
Zastosuj UITextFieldDelegate
protokół w niestandardowym kontrolerze widoku.
class YourCustomController: UIViewController, UITextFieldDelegate {
...
}
W viewDidLoad
metodzie kontrolera widoku niestandardowego przypisz delegata pola tekstowego do klasy kontrolera widoku niestandardowego.
override func viewDidLoad() {
super.viewDidLoad()
numberField.delegate = self
}
Dodaj UITextFieldDelegate
„s func textField(textField: UITextField, shouldChangeCharactersInRange range: NSRange, replacementString string: String) -> Bool
metody.
W wyniku ustawienia numberField
delegata niestandardowego kontrolera widoku jako delegata w poprzednim kroku, ta metoda będzie wywoływana za każdym razem, gdy użytkownik wprowadzi znak do pola tekstowego. Jeśli metoda powróci, true
znak pozostanie w polu tekstowym. Jeśli metoda powróci, false
znak nie pozostanie w polu tekstowym.
string
Parametrem jest znak wprowadzanego przez użytkownika. Jeśli string
znak można zamienić na an, Int
to jest między 0 a 9; w przeciwnym razie jest to jakiś znak niebędący liczbą.
class YourCustomController: UIViewController, UITextFieldDelegate {
...
func textField(textField: UITextField, shouldChangeCharactersInRange range: NSRange, replacementString string: String) -> Bool {
return Int(string) != nil
}
}
(Zobacz poniżej pełny kod kontrolera).
Przykład kontrolera widoku z polem tekstowym zawierającym tylko cyfry
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
}
}
Przykładowy kontroler widoku z dziesiętnym polem tekstowym
Jeśli chcesz obsługiwać liczbę dziesiętną, skorzystaj z NSNumberFormatter
. Zobacz komentarze do kodu dotyczące różnic.
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
}
}