Pasos muy específicos para el código Swift
Puede proporcionar lógica que restrinja la entrada del campo de texto en el func textField(textField: UITextField, shouldChangeCharactersInRange range: NSRange, replacementString string: String) -> Bool
método implementando el UITextFieldDelegate
protocolo.
En aras de la claridad, estos pasos asumen que su guión gráfico contiene un controlador de vista con un objeto de campo de texto que solo debe aceptar dígitos.
Cree una clase personalizada para el controlador de vista que se extiende UIViewController
. Asegúrese de que la escena en su guión gráfico se refiera a la clase personalizada estableciendo el valor de la clase personalizada en el Inspector de identidad de Xcode.
import UIKit
class YourCustomController: UIViewController {
override func viewDidLoad() {
super.viewDidLoad()
}
}
Cree una salida desde el campo de texto de su escena a su controlador de vista personalizado.
class YourCustomController: UIViewController {
@IBOutlet weak var numberField: UITextField!
...
}
Aplica el UITextFieldDelegate
protocolo en tu controlador de vista personalizado.
class YourCustomController: UIViewController, UITextFieldDelegate {
...
}
En el viewDidLoad
método de su controlador de vista personalizado , asigne el delegado de su campo de texto a su clase de controlador de vista personalizado.
override func viewDidLoad() {
super.viewDidLoad()
numberField.delegate = self
}
Añadir la UITextFieldDelegate
's func textField(textField: UITextField, shouldChangeCharactersInRange range: NSRange, replacementString string: String) -> Bool
método.
Como resultado de hacer que su controlador de vista personalizado sea el numberField
delegado en el paso anterior, este método se llamará cada vez que un usuario ingrese un carácter en el campo de texto. Si su método regresa true
, el carácter permanecerá en el campo de texto. Si su método regresa false
, el carácter no permanecerá en el campo de texto.
El string
parámetro es el carácter que ingresa el usuario. Si el string
carácter se puede convertir en un, Int
entonces está entre 0 y 9; de lo contrario, es un carácter no numérico.
class YourCustomController: UIViewController, UITextFieldDelegate {
...
func textField(textField: UITextField, shouldChangeCharactersInRange range: NSRange, replacementString string: String) -> Bool {
return Int(string) != nil
}
}
(Consulte a continuación el código del controlador de vista completa).
Ejemplo de controlador de vista con campo de texto de solo dígitos
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
}
}
Ejemplo de controlador de vista con un campo de texto decimal
Si desea admitir un número decimal, aproveche NSNumberFormatter
. Consulte los comentarios del código para conocer las diferencias.
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
}
}