2011-06-20 18 views
12

He estado buscando en la web alrededor de una hora y no encuentro ningún código que me ayude con esto.UITextView resignar el primer respondedor en 'Listo'

Tengo un UITextView que tengo que resignar a la primera respuesta de cuando el usuario presiona el botón 'Listo' en su teclado.

he visto código flotando alrededor de la Internet como esto:

-(BOOL) textFieldShouldReturn:(UITextField *)textField { 
[textField resignFirstResponder]; 
return NO; 
} 

Pero eso no va a funcionar para un UITextView. En pocas palabras, ¿Cómo puedo saber cuándo el usuario presiona el botón hecho en el teclado?

Respuesta

44

Implemente el método delegado shouldChangeTextInRange:.

Utilice el siguiente enfoque y la solución solo funcionará con @ "\ n" (carácter de línea nueva).

//In you *.h file make sure you add 
@interface v1ViewController : UIViewController <UITextViewDelegate> 

- (void)viewDidLoad 
{ 
    [super viewDidLoad]; 
    // Do any additional setup after loading the view, typically from a nib. 

    myTextField.delegate = self; 
} 

    - (BOOL)textView:(UITextView *)textView shouldChangeTextInRange:(NSRange)range 
      replacementText:(NSString *)text 
     { 

      if ([text isEqualToString:@"\n"]) { 

       [textView resignFirstResponder]; 
       // Return FALSE so that the final '\n' character doesn't get added 
       return NO; 
      } 
      // For any other character return TRUE so that the text gets added to the view 
      return YES; 
    } 
+0

Tengo esa configuración. ¿Cómo puedo detectar cuándo se presiona? –

+0

establece delegado de campo de texto como 'myTextField.delegate = self;' y devuelve 'SÍ' en el método' textFieldShouldReturn'; – Jhaliya

+2

@Jhaliya por favor, lea el OP, es un texto VER NO un texto CAMPO –

-3

Usted puede utilizar el método delegado

- (void)textViewDidEndEditing:(UITextView *)textView { 
    [textView resignFirstResponder]; 
} 

Usted tiene que configurar su controlador como el delegado para la Vista de Texto. Para obtener más métodos, puede echar un vistazo aquí: http://developer.apple.com/library/ios/#documentation/UIKit/Reference/UITextViewDelegate_Protocol/Reference/UITextViewDelegate.html%23//apple_ref/doc/uid/TP40006897

+0

No funcionó, no sucedió nada diferente en mi aplicación. Tengo mi delegado configurado, y tengo la configuración del teclado como yo quiero, pero ese código nunca se llama. –

+2

'textViewDidEndEditing:' se invoca cuando finaliza la edición, es decir, cuando textView ya ha rescindido el primer respondedor, por lo que '[textView resignFirstResponder];' dentro de él no tendrá ningún efecto. – nacho4d

+0

Tienes razón. Debería leer la documentación otra vez – Pierre

Cuestiones relacionadas