Quiero que el usuario escriba hasta 29 dígitos en UITextfield y tome dos decimales, por lo que la longitud total de uitextfield debe ser 32.

Gracias

-1
Nisha Nair 27 dic. 2016 a las 11:50

3 respuestas

La mejor respuesta

Use el método delegado textField para restringir los valores de entrada, se llama cada vez que el texto del campo de texto se actualiza / cambia.

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

func textField(_ textField: UITextField, shouldChangeCharactersIn range: NSRange, replacementString string: String) -> Bool
{
    let newString = NSString(string: textField.text!).replacingCharacters(in: range, with: string)

    if newString.characters.count > 32 { //restrict input upto 32 characters
        return false
    } else {

        let characterset = CharacterSet(charactersIn: "0123456789.") //0-9 digit and . is allowed

        if newString.rangeOfCharacter(from: characterset.inverted) == nil {

            let fullNumberArray = newString.components(separatedBy: ".") //Convert string into array
           if fullNumberArray.count > 2 { // more than 2 . exist
                return false
            }
           else if fullNumberArray.count == 2 { // Fractional part exist
                if fullNumberArray[0].characters.count <= 29 &&  fullNumberArray[1].characters.count <= 2 {
                    return true
                } }else {
                        // Only No decimal point exist , numeric digits only entered so far
                        if fullNumberArray[0].characters.count <= 29 {
                            return true
                            }
            }

        }

    }

    return false
}

Nota El código anterior permite ingresar un máximo de 29 dígitos numéricos y un máximo de 2 dígitos fraccionarios. El usuario puede escribir números sin decimales. Si tiene una restricción de solo permitir 32 caracteres y hay un mínimo y un máximo de 29 dígitos sin rango de fracción, se reducirán algunas condiciones.

3
Muhammad Adnan 27 dic. 2016 a las 11:17

Puede usar

  • (BOOL) textField: (UITextField *) textField shouldChangeCharactersInRange: (NSRange) rango replaceString: cadena (NSString *)

Delegado de UITextField cuando el usuario presiona cualquier carácter en el teclado. Luego, en delegado puede verificar cuántos caracteres ha presionado el usuario y si la longitud de los caracteres presionados por el usuario es 32, puede verificar que el texto ingresado contenga 32 dígitos o 2 decimales o no. Además, puedes hacer tu propia lógica diferente.

0
Usman Javed 27 dic. 2016 a las 09:12
if  let text1 = textField1.text,
    let text2 = textField2.text,
    text1.characters.count <= 29 &&
    text1.characters.count + text2.characters.count <= 32 {
}

Esto debería hacer el trabajo

0
Axel 27 dic. 2016 a las 09:00