iphone uitextviewdelegate

iphone - Limitar el número de caracteres en uitextview



uitextviewdelegate (13)

Aquí vamos para mejor ajuste. Muestra el número de caracteres que quedan: ''n'' caracteres restantes.

var charCount = 0; let maxLength = 150 func textView(textView: UITextView, shouldChangeTextInRange range: NSRange, replacementText text: String) -> Bool { if text == "" // Checking backspace { if textView.text.characters.count == 0 { charCount = 0 characterCount.text = String(format: "%i Characters Left", maxLength - charCount) return false } charCount = (textView.text.characters.count - 1) characterCount.text = String(format: "%i Characters Left", maxLength - charCount) return true } else { charCount = (textView.text.characters.count + 1) characterCount.text = String(format: "%i Characters Left", maxLength - charCount) if charCount >= maxLength + 1 { charCount = maxLength characterCount.text = String(format: "%i Characters Left", maxLength - charCount) return false; } } return true }

Le doy una vista de texto para tuitear una cadena.

Estoy aplicando el siguiente método para restringir el número de caracteres a 140 de longitud.

- (BOOL)textView:(UITextView *)textView shouldChangeTextInRange:(NSRange)range replacementText:(NSString *)text{ if([text isEqualToString:@"/b"]){ DLog(@"Ohoooo"); return YES; }else if([[textView text] length] > 140){ return NO; } return YES; }

El código funciona bien, excepto la primera condición de que el retroceso no funciona. Supongamos que he alcanzado el límite de 140 caracteres, de modo que el método me dará falso y el usuario no puede insertar más caracteres, pero después de eso, cuando intento eliminar algunos caracteres, la vista de texto se comporta como está deshabilitada.

Entonces, la pregunta ¿cómo eliminar caracteres de textview.text o volver a habilitar la vista de texto?


Aunque necesitaba una condición if-else , esto funcionó para mí:

- (BOOL)textView:(UITextView *)textView shouldChangeTextInRange:(NSRange)range replacementText:(NSString *)text { BOOL status = textView.text.length + (text.length - range.length) <= 15; if (status) { [self.btnShare setEnabled:YES]; [self.btnShare setAlpha:1]; } else { [self.btnShare setEnabled:NO]; [self.btnShare setAlpha:0.25]; } return status; }

Inicialmente, el botón está desactivado. Pero si desea que el usuario no pueda publicar una prueba vacía, simplemente coloque una condición en el clic del botón:

- (void)btnShare_click:(id)sender { NSString *txt = [self.txtShare.text stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceAndNewlineCharacterSet]]; if ([txt length] == 0) { [self.btnShare setEnabled:NO]; [self.btnShare setAlpha:0.25f]; [[[UIAlertView alloc]initWithTitle:nil message:@"Please enter some text to share." delegate:nil cancelButtonTitle:@"OK" otherButtonTitles:nil] show]; return; } . . . . . . // rest of your code }


El problema con algunas de las respuestas dadas anteriormente es, por ejemplo, que tengo un campo de texto y tengo que establecer un límite de entrada de 15 caracteres, luego se detiene después de ingresar el 15 ° carácter. pero no permiten eliminar. Ese es el botón de borrar y tampoco funciona. Como yo estaba enfrentando el mismo problema. Salió con la solución, dada a continuación. Funciona perfecto para mí

- (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string { if(textField.tag==6) { if ([textField.text length]<=30) { return YES; } else if([@"" isEqualToString:string]) { textField.text=[textField.text substringToIndex:30 ]; } return NO; } else { return YES; } }

Estoy teniendo un campo de texto, cuya etiqueta he establecido "6" y he restringido el límite máximo de caracteres = 30; funciona bien en todos los casos


En su lugar, debería buscar una cadena vacía, como dice la referencia de la manzana

Si el usuario presiona la tecla Eliminar, la longitud del rango es 1 y un objeto de cadena vacío reemplaza ese único carácter.

Creo que el cheque que realmente desea hacer es algo así como [[textView text] length] - range.length + text.length > 140 , para tener en cuenta las operaciones de cortar / pegar.


Escriba el código siguiente en textView:shouldChangeTextInRange:replacementText: method:

if ([textView.text length]>=3 && ![text isEqualToString:@""]) { return NO; } return YES;


Probar 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; }


Rápido:

// MARK: UITextViewDelegate let COMMENTS_LIMIT = 255 func textView(textView: UITextView, shouldChangeTextInRange range:NSRange, replacementText text:String ) -> Bool { return count(comments.text) + (count(text) - range.length) <= COMMENTS_LIMIT; }


Sin embargo, puede utilizar el código de trabajo a continuación también ..

- (void)textViewDidChange:(UITextView *)textView{ NSInteger restrictedLength=140; NSString *temp=textView.text; if([[textView text] length] > restrictedLength){ textView.text=[temp substringToIndex:[temp length]-1]; } }


Versión Swift de @Tim Gostony:

// restrict the input for textview to 500 func textView(textView: UITextView, shouldChangeTextInRange range: NSRange, replacementText text: String) -> Bool { return count(textView.text) + (count(text) - range.length) <= 500; }


para swift 4:

//MARK:- TextView Delegate func textView(_ textView: UITextView, shouldChangeTextIn range: NSRange, replacementText text: String) -> Bool { //300 chars restriction return textView.text.count + (text.count - range.length) <= 300 }


ue esto

- (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string { int limit = 139; return !([textField.text length]>limit && [string length] > range.length); }

esto solo ingresará 140 caracteres y puede eliminarlos si es necesario


- (BOOL)textView:(UITextView *)textView shouldChangeTextInRange:(NSRange)range replacementText:(NSString *)text { return textView.text.length + (text.length - range.length) <= 140; }

Esto explica que los usuarios corten texto o eliminen cadenas más largas que un solo carácter (es decir, si seleccionan y luego presionan el retroceso) o resaltan un rango y pegan cadenas más cortas o más largas que él.

Versión Swift 2.0

func textView(textView: UITextView, shouldChangeTextInRange range: NSRange, replacementText text: String) -> Bool { return textView.text.characters.count + (text.characters.count - range.length) <= 140 }


Use the following code... - (BOOL)textView:(UITextView *)textView shouldChangeTextInRange:(NSRange)range replacementText:(NSString *)text { if(text.length == 0) { return YES; } else if(self.txtViewComments.text.length > 255) { return NO; } else { return YES; } }