Primero, para ser claros, a diferencia de una aplicación web, la validación no tiene que suceder dos veces (lado del cliente, luego del lado del servidor). Puede codificar (y sí, siempre hay excepciones) con la expectativa de que un usuario solo podrá ingresar lo que los controles le dan.
Entonces, para responder a su pregunta, valide los campos utilizando métodos delegados proporcionados por el control. Tome UITextField, puede notificarle sobre cambios en tiempo real a través de sus métodos delegados (o notificaciones).
Tome este fragmento, que solo permite que una entrada numérica de estilo de banco se complete desde la derecha y también tiene un límite de caracteres predeterminado de 40 caracteres para cualquier otro campo de texto que use la clase como delegado:
- Cómo asegurar mi API para uso de desarrolladores de sitios web y aplicaciones de terceros
- ¿Comprar un MacBook Pro 2016 al máximo hará que Xcode compile mi aplicación más rápido?
- ¿Cuáles son las partes integrales que intervienen en el desarrollo de iOS que los principiantes generalmente no conocen o tienen problemas?
- ¿Cómo y dónde puedo conseguir un trabajo como desarrollador de iOS en una posición de principiante? ¿Qué habilidades se esperarían de mí?
- ¿Vale la pena crear aplicaciones gratuitas para iOS, o estoy mejor trabajando con Android?
deje AMOUNT_MAX = 10_000_000
dejar DEFAULT_CHARACTER_LIMIT = 40
cantidad var = 0.0
func textField (_ textField: UITextField, shouldChangeCharactersIn range: NSRange, replaceString string: String) -> Bool {
let count = textField.text? .characters.count ?? 0 0
let char = string.cString (usando: .utf8)
let isBackspace = strcmp (char, “\\ b”) == -92
switch (textField) {
cantidad del casoTextField:
si se deja convertidoString = Doble (cadena) {
cantidad * = 10
cantidad + = convertString / 100
} más {
if (isBackspace) {
cantidad / = 10
cantidad = piso (cantidad * 100) / 100
}
}
if (cantidad <AMOUNT_MAX) {
let formatter = NumberFormatter ()
formatter.numberStyle = .currency
formatter.maximumFractionDigits = 2
formatter.locale = Locale (identificador: Locale.current.identifier)
textField.text = formatter.string (de: cantidad como NSNumber)
}
falso retorno
defecto:
if (isBackspace) {
volver verdadero
} más {
return (cuenta <= DEFAULT_CHARACTER_LIMIT)
}
}
}