Me gustaría establecer un número máximo de caracteres permitidos para ser escrito en un UITextView y un UITextField. Este número se muestra a continuación, en una pequeña etiqueta (para referencia del usuario, Twitter Estilo).

  • Compruebe la longitud actual del texto, no es lo que la longitud está a punto de convertirse.
  • stackoverflow.com/a/1773257/4475605
  • fuimos en el enlace que he añadido el código en ViewDidLoad y reemplazado UITextField con myMessageObjectLabel ¿es lo correcto? Ahora tengo este error el Uso de actividades no declaradas de tipo ‘myMessageObjectLabel’. Estoy usando swift 1.2 ahora, podría ser un problema?
InformationsquelleAutor biggreentree | 2015-10-04

8 Comentarios

  1. 82

    Actualización Swift 4.X

    func textView(_ textView: UITextView, shouldChangeTextIn range: NSRange, replacementText text: String) -> Bool {
        let newText = (textView.text as NSString).replacingCharacters(in: range, with: text)
        let numberOfChars = newText.count
        return numberOfChars < 10    //10 Limit Value
    }

    Intenta esto:

    func textView(textView: UITextView, shouldChangeTextInRange range: NSRange, replacementText text: String) -> Bool {
        let newText = (textView.text as NSString).stringByReplacingCharactersInRange(range, withString: text)
        let numberOfChars = newText.characters.count //for Swift use count(newText)
        return numberOfChars < 10;
    }
    • Esto es correcto, pero ¿por qué el nombre de variable numberOfLines cuando es el número de caracteres?
    • sí, esto es correcto, se me olvidó el número de líneas
    • ¿Qué número de líneas? No hay nada en la pregunta acerca de la limitación del número de líneas.
    • Gracias @rmaddy por señalar. Se trataba de un error tipográfico en un apuro :-), corregido ahora!
    • He añadido este código en ViewDidLoad y reemplazado textView: UITextView con myMessageTextView ¿es lo correcto? Ahora tengo este error Cadena no tiene un miembro llamado ‘personajes’. Estoy usando swift 1.2 ahora, podría ser un problema?
    • Sí, como he mencionado en mi código. Para Swift uso count(newText). Estoy usando Swift 2.
    • Hey … 1 minuto, usted dijo que se agregó mi código en viewDidLoad? Bueno eso no es correcto. En su viewDidLoad habría que agregar su controlador de vista como delegado para su UITextField algo como esto myMessageObjectLabel.delegate = self. El código que he compartido anteriormente es un delegado llamar de UITextField – agregar en el archivo de clase como una función independiente y se debe obtener llamado de nuevo para cada uno de los caracteres tecleados por el usuario en el campo de texto.
    • Tiene que ajustarse a UITextViewDelegate protocolo. Supongo que por error se añadió texto presentado delegado. Por favor, compruebe que fuera. @biggreentree
    • Estoy seguro de que su muy simple. Sería posible para usted para compartir el proyecto en github? Me puedes echar un vistazo. @biggreentree
    • Hey, tu firma de método es totalmente apagado. Echa un vistazo a mi post. Usted no debe usar self.startingMessageTextView , sino que debe ser UITextView. Utilizar mi método de palabra por palabra. @biggreentree
    • usted es totalmente correcto, me lo cambiaron porque en mi mente me estaba actuando sólo en ese seleccionado UITextView todo funciona de maravilla! gracias voy a hacer lo mismo en mi UITextField para el objeto
    • Permítanos continuar esta discusión en el chat.
    • No debería la última línea se return numberOfChars <= 10; (los menos-que el símbolo debe ser menor que o igual a)?
    • cómo restringir el texto copiado de aquí? como, portapapeles consiguió 2000 caracteres de la cadena donde textview permite a los 1500 caracteres, así que cuando me pegue el largo de la cadena de dejar que el textview vacío en lugar de la copia de 1500 caracteres.

  2. 35

    SWIFT 4

    func textView(_ textView: UITextView, shouldChangeTextIn range: NSRange, replacementText text: String) -> Bool {
         let newText = (textView.text as NSString).replacingCharacters(in: range, with: text)
         return newText.count < 10
    }
    • en Swift 4 su: vamos a numberOfChars = newText.contar
    • gracias, actualizado mi respuesta a Swift 4, ya que Swift 3 ya no es relativo..
  3. 12

    Swift 4:

    func textView(_ textView: UITextView, shouldChangeTextIn range: NSRange, replacementText text: String) -> Bool {
      let newText = (textView.text as NSString).replacingCharacters(in: range, with: text)
      return newText.count <= 70
    }
  4. 9

    Intenta esto:-

     func textView(textView: UITextView, shouldChangeTextInRange range: NSRange, replacementText text: String) -> Bool {
        print("chars \(textView.text.characters.count) \( text)")
    
        if(textView.text.characters.count > 20 && range.length == 0) {
            print("Please summarize in 20 characters or less")
            return false;
        }
    
        return true;
    }
  5. 5

    Swift 3.0

    Acaba de anular este UITextFieldDelegate función, ajuste la characterLimit variable y que son buenos para ir:

    func textField(_ textField: UITextField, shouldChangeCharactersIn range: NSRange, replacementString string: String) -> Bool 
    {        
            let characterLimit = 5
            let newText = NSString(string: textField.text!).replacingCharacters(in: range, with: string)
            let numberOfChars = newText.characters.count
            return numberOfChars < characterLimit
    }
    • que el campo de texto, no en vista de texto de mi hombre
  6. 3

    Swift 4/Xcode 9.1

    func textView(_ textView: UITextView, shouldChangeTextIn range: NSRange, replacementText text: String) -> Bool {
    
        let currentText = textView.text ?? ""
        guard let stringRange = Range(range, in: currentText) else { return false }
        let changedText = currentText.replacingCharacters(in: stringRange, with: text)
        return changedText.count <= 399 //Pass your character count here 
    }
  7. 1

    Swift 4 , Xcode 9.1 GM

    func textView(_ textView: UITextView, shouldChangeTextIn range: NSRange, replacementText text: String) -> Bool {
        adjustFrames()
        return textView.text.count + (text.count - range.length) <= 200
    }
  8. 0

    Swift 5

    func textView(_ textView: UITextView, shouldChangeTextIn range: NSRange, replacementText text: String) -> Bool {
        var newText = textView.text!
        newText.removeAll { (character) -> Bool in
            return character == " " || character == "\n"
        }
    
        return (newText.count + text.count) <= 40
    }

Dejar respuesta

Please enter your comment!
Please enter your name here