¿Cómo puedo obtener limitar el usuario TextField de entrada a números de Swift?

Es usted el uso de storyboards? Si hay una opción en el inspector de propiedades para permitir sólo caracteres numéricos
también es útil stackoverflow.com/a/26337774/294884

OriginalEl autor Santis | 2014-11-30

5 Comentarios

  1. 36

    Puede utilizar UITextFieldDelegate‘s shouldChangeCharactersInRange método para limitar la entrada del usuario a los números:

    func textField(textField: UITextField,
        shouldChangeCharactersInRange range: NSRange,
        replacementString string: String) -> Bool {
    
        //Create an `NSCharacterSet` set which includes everything *but* the digits
        let inverseSet = NSCharacterSet(charactersInString:"0123456789").invertedSet
    
        //At every character in this "inverseSet" contained in the string,
        //split the string up into components which exclude the characters
        //in this inverse set
        let components = string.componentsSeparatedByCharactersInSet(inverseSet)
    
        //Rejoin these components
        let filtered = components.joinWithSeparator("")  //use join("", components) if you are using Swift 1.2
    
        //If the original string is equal to the filtered string, i.e. if no
        //inverse characters were present to be eliminated, the input is valid
        //and the statement returns true; else it returns false
        return string == filtered
    }

    Actualizado para Swift 3:

     func textField(_ textField: UITextField, 
        shouldChangeCharactersIn range: NSRange, 
        replacementString string: String) -> Bool {
    
        //Create an `NSCharacterSet` set which includes everything *but* the digits
        let inverseSet = NSCharacterSet(charactersIn:"0123456789").inverted
    
        //At every character in this "inverseSet" contained in the string,
        //split the string up into components which exclude the characters
        //in this inverse set
        let components = string.components(separatedBy: inverseSet)
    
        //Rejoin these components
        let filtered = components.joined(separator: "")  //use join("", components) if you are using Swift 1.2
    
        //If the original string is equal to the filtered string, i.e. if no
        //inverse characters were present to be eliminated, the input is valid
        //and the statement returns true; else it returns false
        return string == filtered  
    }
    join("", components) rompe en Swift 2.0, ¿components.joinWithSeparator("") lugar.
    bastante código. este es un modelo de cómo escribir código auto-documentado. y dat es el único código.
    deje que los componentes = cadena.componentes(separatedBy: inverseSet) // a unir estos componentes dejar filtrada = componentes.se unió a(separador: «») para Swift 3
    y qué hacer con esas funciones?
    por qué no mencionó a UITextFieldDelegate??

    OriginalEl autor Lyndsey Scott

  2. 1

    1er usted tiene que heredar el UITextViewDelegate clase con sus propios
    clase

    class ViewController: UIViewController, UITextViewDelegate {

    2º añadir un IBOutlet

    @IBOutlet weak var firstName: UITextField!

    3er usted tiene que asegurar que este objeto es el uso de

    override func viewDidLoad() {
            super.viewDidLoad()
       firstName.delegate = self
    }
    
    
    func textField(_ textField: UITextField, shouldChangeCharactersIn range: NSRange, replacementString string: String) -> Bool {
        if textField == firstName {
                    let allowedCharacters = "1234567890"
                    let allowedCharacterSet = CharacterSet(charactersIn: allowedCharacters)
                    let typedCharacterSet = CharacterSet(charactersIn: string)
                    let alphabet = allowedCharacterSet.isSuperset(of: typedCharacterSet)
                    let Range = range.length + range.location > (fnameTF.text?.count)!
    
            if Range == false && alphabet == false {
                return false
            }
    
    
            let NewLength = (fnameTF.text?.count)! + string.count - range.length
            return NewLength <= 10
    
    
          }
      }

    OriginalEl autor akbar khan

  3. 1

    En swift 4.1 y Xcode 10

    Agregar UITextFieldDelegate a su clase

    class YourViewController: UIViewController, UITextFieldDelegate

    A continuación, escriba este código en tu viewDidLoad()

    yourTF.delegate = self

    Escribir este textfield delegado la función de

    //MARK - UITextField Delegates
    func textField(_ textField: UITextField, shouldChangeCharactersIn range: NSRange, replacementString string: String) -> Bool {
        //For numers
        if textField == yourTF {
            let allowedCharacters = CharacterSet(charactersIn:"0123456789")//Here change this characters based on your requirement
            let characterSet = CharacterSet(charactersIn: string)
            return allowedCharacters.isSuperset(of: characterSet)
        }
        return true
    }

    OriginalEl autor iOS

  4. 1

    Para cualquier persona en busca de una respuesta más breve, he encontrado este bastante útil.

    func textField(_ textField: UITextField, shouldChangeCharactersIn range: NSRange, replacementString string: String) -> Bool {
        //remove non-numerics and compare with original string
        return string == string.filter("0123456789".contains)
    }

    Obras en XCode 10.1, Swift 4.2

    OriginalEl autor Patrick Lin

  5. 0

    Bien el iOS no ofrece la funcionalidad de donde puede especificar textfield para aceptar sólo caracteres numéricos. La única manera sería, uno de UITextFieldDelegate métodos, que es como sigue,

    (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string

    Que usted necesita para implementar el siguiente método y la intersección con el carácter introducido y ya sea a través de la siguiente expresión regular

    "^([0-9]+)?(\.([0-9]{1,2})?)?$"

    o

    [NSCharacterSet decimalDigitCharacterSet]

    usted puede averiguar si el carácter es numérico y volver si coincide con la expresión regular o conjunto de caracteres else return NO.

    OriginalEl autor ldindu

Dejar respuesta

Please enter your comment!
Please enter your name here