fields swift swift2 uitextfield

swift - fields - text field ios 11



¿Cómo restringir ciertos caracteres en UITextField en Swift? (6)

Estoy creando una aplicación de preguntas y respuestas que solicita un nombre de usuario al inicio. Me gustaría imposibilitar el uso de caracteres como # $ @! ^ & Etc (también incluido "espacio"). Eché un vistazo a este post aquí, pero está escrito completamente en Objective-C. Gracias por adelantado.


Como explícitamente está pidiendo Swift, he traducido la respuesta superior en la pregunta vinculada.

let notAllowedCharacters = " ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789_."; func textField( textField: UITextField, shouldChangeCharactersInRange range: NSRange, replacementString string: String) -> Bool { let set = NSCharacterSet(charactersInString: notAllowedCharacters); let inverted = set.invertedSet; let filtered = string .componentsSeparatedByCharactersInSet(inverted) .joinWithSeparator(""); return filtered != string; }


internal func textField(textField: UITextField, shouldChangeCharactersInRange range: NSRange, replacementString string: String) -> Bool{ if let text = string{ if text == "#" || text == "$" || text == "!"{ //and so on return false } } return true }


Swift 2.3

func textField(textField: UITextField, shouldChangeCharactersInRange range: NSRange, replacementString string: String) -> Bool { let characters = ["#", "$", "!", "&","@"] for character in characters{ if string == character{ print("This characters are not allowed") return false } } }


Swift: 3 y un enfoque diferente:

Agregue una función de destino para el cambio del campo de texto en su viewDidLoad:

override func viewDidLoad() { super.viewDidLoad() textField.addTarget(self, action: #selector(ViewController.textFieldDidChange(textField:)), for: UIControlEvents.editingChanged) }

en la función de destino, simplemente detecte el carácter introducido y reemplácelo con un espacio en blanco. Lo he probado y evita que el usuario ingrese caracteres no deseables en el campo de texto.

func textFieldDidChange(textField: UITextField) { if let textInField = textField.text{ if let lastChar = textInField.characters.last{ //here include more characters which you don''t want user to put in the text field if(lastChar == "*") { textField.text = textInField.substring(to: textInField.index(before: textInField.endIndex)) } } } }


Agregando a lo que dijo @Evdzhan Mustafa. Desea agregar una declaración de devolución en caso de que la cadena esté vacía. Sin él, no podrás borrar tu texto. Código modificado a continuación:

Versión de Swift 3

let notAllowedCharacters = " ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789_."; func textField(_ textField: UITextField, shouldChangeCharactersIn range: NSRange, replacementString string: String) -> Bool { if string.isEmpty{ return true } print("String: /(string)") let set = NSCharacterSet(charactersIn: notAllowedCharacters); let inverted = set.inverted; let filtered = string.components(separatedBy: inverted).joined(separator: "") print("String Filtered: /(filtered)") return filtered != string; }


Esta es probablemente la forma más robusta de restringir los espacios . El uso de este usuario no podrá Pegar / Escribir espacios en blanco

Así es como puedes implementar usando Swift 3 .

Agregue el fragmento de extension mencionado a continuación a un archivo Swift;

extension String { var containsWhitespace: Bool { for scalar in unicodeScalars { switch scalar.value { case 0x20: return true default: continue } } return false } }

En su archivo ViewController Swift, arrastre su Instancia modificada de edición y una Salida de referencia de UITextField desde Storyboard, el mencionado en la imagen a continuación:

Use las instancias arrastradas como se menciona a continuación:

Hacer referencia a Outlet como:

@IBOutlet weak var textField: UITextField!

y Edición Modificada como:

@IBAction func textChanged(_ sender: UITextField) { if (textField.text!.containsWhitespace) == true { print("Restrict/Delete Whitespace") emailField.deleteBackward() } else { print("If Its not Whitespace, Its allowed.") } }

Esto detectará y eliminará el espacio en blanco tan pronto como el usuario intente escribirlo / pegarlo .