Limitar el número de caracteres que un usuario puede ingresar no está funcionando

Debo limitar la cantidad de caracteres que un usuario puede ingresar en una vista de text. Im limitarlo a 500 caracteres A continuación se muestra mi código,

- (void)textViewDidChange:(UITextView *)textView{ NSInteger restrictedLength=500; NSString *temp=textView.text; NSLog(@"hekk %ld",[[textView text]length]); if([[textView text] length] > restrictedLength){ textView.text=[temp substringToIndex:[temp length]-1]; } } 

El problema es que, si el usuario edita la vista de text con el keyboard, es posible que el usuario no pueda escribir más de 500 caracteres. Pero si el usuario copy los texts, el usuario puede ingresar más de 500 caracteres. Hoe puedo resolver esto?

He usado este código en mi aplicación. Su trabajo está bien.

 -(BOOL)textView:(UITextView *)textView shouldChangeTextInRange:(NSRange)range replacementText:(NSString *)text { if([text isEqualToString:@"\n"]) [textView resignFirstResponder]; else { if (textView.text.length + (text.length - range.length) == 400) { [appDel displayAlert:@"Message limit is 400 character."]; } return textView.text.length + (text.length - range.length) <= 400; } return YES; } 

Usar el método delegado:

shouldChangeCharactersInRange

Aquí un ejemplo:

  - (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string { NSInteger restrictedLength=500; NSString *temp=textView.text; NSLog(@"hekk %ld",[[textView text]length]); if(([[textView text] length] > restrictedLength)&&(range.length == 0)){ return NO; } return YES; } 

Es mejor usar el método delegado de shouldChangeTextInRange para dicho caso.

 func textView(textView: UITextView, shouldChangeTextInRange range: NSRange, replacementText text: String) -> Bool { let textLenghtLimit = 100 let isChareactersLimitReached = (textView.text.characters.count - range.length + text.characters.count > textLenghtLimit) return !isChareactersLimitReached } 

Prueba esto.

 - (BOOL)textView:(UITextView *)textView shouldChangeTextInRange:(NSRange)range replacementText:(NSString *)text { int maxCharacters = 500; NSString *newString = [textView.text stringByReplacingCharactersInRange:range withString:text]; if(newString.length > maxCharacters){ textView.text = [newString substringToIndex:maxCharacters]; return NO; } return YES; } 

Puede usar el método de delegado UITextView de UITextView Class.

Siempre que se cambie el text en UITextView se shouldChangeCharactersInRange a shouldChangeCharactersInRange .

Entonces, puede validar sus requisitos en este método de la siguiente manera:

 - (BOOL)textView:(UITextView *)textView shouldChangeTextInRange:(NSRange)range replacementText:(NSString *)text { NSInteger restrictedLength=500; NSString *temp=textView.text; NSLog(@"hekk %ld",[[textView text]length]); if([[textView text] length] > restrictedLength){ textView.text=[temp substringToIndex:restrictedLength]; return NO; } return YES; } 

El código siguiente limita la input de text para 100 caracteres.

 - (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string { if(textField.text.length < 100) { return true; } return false; } 

Respuesta simple

 -(BOOL)textView:(UITextView *)textView shouldChangeTextInRange:(NSRange)range replacementText:(NSString *)text { if(range.length + range.location > textView.text.length) { return NO; } NSUInteger newLength = [textView.text length] + [text length] - range.length; return newLength <= 500; }