2012-02-04 23 views
6

He estado buscando soluciones y encontré la siguiente pieza de código. Pero no sé cómo usarlo, desafortunadamente.¿Cómo puedo limitar los caracteres en UITextView?

- (BOOL)textView:(UITextView *)textView shouldChangeTextInRange:(NSRange)range replacementText:(NSString *)string { 
     NSUInteger newLength = [textField.text length] + [string length] - range.length; 
     return (newLength > 25) ? NO : YES; 
    } 

Sólo para propósitos de prueba se configura un IBACTION

-(IBAction)checkIfCorrectLength:(id)sender{ 
    [self textView:myTextView shouldChangeTextInRange: ?? replacementText: ?? ]; 

} 

Qué puedo pasar por shouldChangeTextInRange y replacementText? ¿O estoy obteniéndolo completamente mal?

+1

Este es un método de delegación: lea la documentación de UITextView y sus protocolos. – Till

Respuesta

11

Llamar a textView:shouldChangeTextInRange:replacementText: desde checkIfCorrectLength: no tiene sentido. Si desea probar la longitud de varios métodos, el factor de la prueba hacia fuera en su propio método:

- (BOOL)isAcceptableTextLength:(NSUInteger)length { 
    return length <= 25; 
} 

- (BOOL)textView:(UITextView *)textView shouldChangeTextInRange:(NSRange)range replacementText:(NSString *)string { 
    return [self isAcceptableTextLength:textField.text.length + string.length - range.length]; 
} 

-(IBAction)checkIfCorrectLength:(id)sender{ 
    if (![self isAcceptableTextLength:self.textField.text.length]) { 
     // do something to make text shorter 
    } 
} 
+0

gracias que funcionó para mí :) –

1

No llamas a ti mismo este método, la vista de texto lo llama cada vez que está a punto de cambiar su texto. Simplemente configure la propiedad de la vista de texto delegate (por ejemplo, su controlador de vista) e implemente el método allí.

2

Hola encontré y modifiqué el código aquí. Entonces para los usuarios de xamarin. intente lo siguiente:

textView.ShouldChangeText += delegate 
{ 
    if(textView.Text.Length > 159) // limit to one sms length 
    { 
     return false; 
    } 

    return true; 
} 
0

Si el objeto actual es el delegado de la vista de texto, a continuación, puede utilizar el siguiente fragmento:

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

Esto funcionó para mí.

0
- (BOOL)textView:(UITextView *)textView shouldChangeTextInRange:(NSRange)range replacementText:(NSString *)text 
{ 
if([text length] == 0) 
{ 
    if([textView.text length] != 0) 
    { 
     return YES; 
    } 
    else { 
     return NO; 
    } 
} 
else if([[textView text] length] > your limit value) 
{ 
    return NO; 
} 
return YES; 

} 
Cuestiones relacionadas