ios swift - Restrinja el número de caracteres en UITextField





apple download (3)


Puedes agregar un evento como este:

textField1.addTarget(self, action: #selector(YourViewController.textFieldDidChange(_:)), forControlEvents: UIControlEvents.EditingChanged)
textField2.addTarget(self, action: #selector(YourViewController.textFieldDidChange(_:)), forControlEvents: UIControlEvents.EditingChanged)

Luego implementa esta función:

func textFieldDidChange(textField: UITextField) {
    if textField == self.textField1 && textField.text.length > 12 { 
        // Do whaterver you want
    }
    if textField == self.textField2 && textField.text.length > 1 { 
        // Do whaterver you want
    }
}

Esta pregunta ya tiene una respuesta aquí:

He visto muchas respuestas, pero parece que ninguna de ellas ha funcionado. Tengo un UIAlertView creado programáticamente con dos UITextFields. Quiero restringir el número de caracteres:

  • 12 caracteres en el primer campo
  • 1 personaje en el segundo campo

Primer código de campo:

alertDialog.addTextField { (nameField) in
        nameField.placeholder = "Name"
        nameField.borderStyle = .roundedRect
        nameField.clearButtonMode = .whileEditing
        }

Y segundo

alertDialog.addTextField { (keyField) in
        keyField.placeholder = "Key"
        keyField.borderStyle = .roundedRect
        keyField.clearButtonMode = .whileEditing

    }

¿Cómo puedo restringir correctamente el número (pretendemos que no habrá pegado en este campo)?




Establecer delegados de textField en la clase respectiva (en mi caso, self es ViewController)

nameField.delegate = self
keyField.delegate = self

Entonces puedes restringir los caracteres por

extension ViewController : UITextFieldDelegate {

    func textField(_ textField: UITextField, shouldChangeCharactersIn range: NSRange, replacementString string: String) -> Bool {

        switch textField {
        case nameField:
            if ((textField.text?.length)! + (string.length - range.length)) > 12 {
                return false
            }

        case keyField:
            if ((textField.text?.length)! + (string.length - range.length)) > 1 {
                return false
            }
        }
        return true 
    }
}



Para ejecutar una prueba individual o una clase de prueba, puede hacer clic en el diamante que se encuentra a su lado en la canaleta. Esto está justo al lado de donde aparecen los números de línea si los tiene activados.

En esta captura de pantalla, mi ratón está sobre el diamante. Observe cómo ha cambiado a una pequeña flecha de juego que indica que se ejecutará.

A continuación, puede volver a ejecutar las pruebas ejecutadas más recientemente con G.

Por lo que sé, esto no se puede hacer a través de xcodebuild .







ios swift swift3