2012-03-21 18 views
13

¿Cómo detectar el carácter de entrada del usuario en UITextView?Cómo detectar el carácter de entrada del usuario en UITextView

Por ejemplo: (en UITextView NO UITextField)

cuando carta de entrada de usuario "a", activar un evento. cuando el usuario ingresa "hazlo", activa otro evento. o la entrada "http://www.stackoverflow.com" activan un evento.

Gracias

+0

por qué no prueba los métodos de UITextFieldDelegate para eso. – Leena

+3

- (BOOL) textView: (UITextView *) textView shouldChangeTextInRange: (NSRange) range replacementText: (NSString *) texto que se activará para cada carta de presentación en textView – Narayana

+0

@Narayana usted es el primero correcto. La próxima vez puede poner la respuesta a "Campo de respuesta". Entonces puedo marcarlo ~ ¡Gracias! –

Respuesta

-7
- (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string 
{ 
    NSString* [email protected]""; 
    parameterStr=[[textField text] stringByAppendingString:string]; 

    if([parameterStr isEqualToString:@"do it"] || [parameterStr isEqualToString:@"http://www.stackoverflow.com"] || [parameterStr isEqualToString:@"a"]) 
    { 
     return YES; 
    } 
    else 
    { 
     return NO; 
    } 
} 
+0

Gracias, pero cambié su código, quité lo demás, devolví NO; –

+1

¡Está bien! Era solo un patrón, se cambiaría según su propósito de uso. – Kuldeep

+4

-1; la pregunta explícitamente solicitada para detectar cambios de contenido en un 'UITextView' y * not * a' UITextField'. Esto está mal y no sé por qué la pregunta lo aceptó. El método análogo en 'UITextViewDelegate' es, como se menciona en otras respuestas,' - (BOOL) textView: (UITextView *) textView shouldChangeTextInRange: (NSRange) range replacementText: (NSString *) text' (y ambos pueden ser inapropiados para el asker's caso de uso, vea http://stackoverflow.com/questions/7010547/uitextfield-text-change-event). –

10

Este delegado serán llamados cada vez que un usuario presiona la tecla

Prueba esto: -

- (BOOL)textView:(UITextView *)textView shouldChangeTextInRange:(NSRange)range replacementText:(NSString *)text 
{ 
    if([[textView.text stringByAppendingString:text] isEqualToString:@"a"]) 
    { 
     //trigger 'a' operation 
    } 
    else if([[textView.text stringByAppendingString:text] isEqualToString:@"do it"]) 
    { 
     //trigger do it operation 
    } 
    //Same conditions go on 
} 
+2

No puede simplemente agregar texto, debe tener en cuenta el rango de dónde ocurrieron los cambios. –

25

Usted puede monitorear los cambios de contenido de Vista de Texto dentro de este método delegado y desencadenar acciones necesarias.

- (void)textViewDidChange:(UITextView *)textView 
{ 
    //Access the textView Content 
    //From here you can get the last text entered by the user 
    NSArray *stringsSeparatedBySpace = [textView.text componentsSeparatedByString:@" "]; 
    //then you can check whether its one of your userstrings and trigger the event 
    NSString *lastString = [stringsSeparatedBySpace lastObject]; 
    if([lastString isEqualToString:@"http://www.stackoverflow.com"]) //add more conditions here 
    { 
      [self callActionMethod]; 
    } 
} 
4

Swift Trabajo 3 Solución

En primer lugar, añadir UITextFieldDelegate

A continuación, establezca delegado en viewDidLoad como tal, self.testTextField.delegate = self

Y, por último, llamar a la función textViewDidChange, ejemplo a continuación.

func textViewDidChange(_ textView: UITextView) { 
    // Do the logic you want to happen everytime the textView changes 
    // if string is == "do it" etc.... 

} 
Cuestiones relacionadas