2012-02-29 14 views
6

Tengo problemas para que el teclado de mi aplicación de iPhone desaparezca porque el UIView incluso cuando se hace un controlador no es táctil debido al hecho de que tengo un UITableView ocupando el resto de la pantalla disponible.¿Cómo renuncioFirstResponder cuando hago clic fuera de un UITextField en un UITableView

Tenía curiosidad por saber cómo iba a renunciar al teclado aka firstResponder haciendo clic en UITableView? ¿Hay alguna manera de controlar un evento táctil en el UITableView, incluso si no se debe seleccionar una celda en la que se pueda hacer clic?

Básicamente, sé cómo renunciar al teclado si la celda dispara el evento pero, si hago clic en una parte que no se puede hacer clic en UITableView, me gustaría que el teclado desaparezca.

Respuesta

6

2 opciones:

  • En su viewController, responden a la llamada de retorno de desplazamiento de la mesa y se resignan el respondedor
-(void)scrollViewDidScroll:(UIScrollView *)scrollView 
{ 
    [self.view endEditing:YES]; 
} 
  • Siempre se puede añadir un UITapGestureRecognizer a la mesa/vista y renunciar al respondedor de t aquí

Personalmente suelo hacerlo en scroll de tabla, ya que no me gusta un solo toque para cerrar el teclado.

+0

Gracias UITAPGestureRecognizer hizo exactamente lo que necesitaba. Aprecio el tiempo. Estoy seguro de que el desplazamiento también funciona, solo necesité el toque en este caso, pero lo mantendré en mi inventario para más adelante. – Rob

3
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath 
    { 
    UITapGestureRecognizer *doubleTap = 
      [[UITapGestureRecognizer alloc] 
      initWithTarget:self 
      action:@selector(tapDetected:)]; 
      doubleTap.numberOfTapsRequired = 1; 
      [self.tableView addGestureRecognizer:doubleTap]; 
      [doubleTap release]; 

    } 

- (IBAction)tapDetected:(UIGestureRecognizer *)sender 
{ 
    CGPoint p = [sender locationInView:self.tableView]; 

    NSIndexPath *indexPath = [self.tableView indexPathForRowAtPoint:p]; 

    if(indexPath == nil) 
    { 
    NSLog(@"empty"); 
    } 
    else 
    { 
    [textField resignFirstResponder]; 
    } 
} 

creo que va a ayudar ... probarlo ..

+1

Terminé usando el desplazamiento porque cuando puse una tapgesture en la vista de tabla, causaba que las celdas dejaran de leer los grifos y, por lo tanto, las celdas no enviaban las celdas porque el gesto del grifo estaba consumiendo el evento. Sin embargo, gracias y probablemente necesite este código en otra situación en el futuro. – Rob

0
@property (weak, nonatomic) UITextField *activeTextField; // keeps track of whose keyboard is being displayed. 

- (void)textFieldDidBeginEditing:(UITextField *)textField { 
    self.activeTextField = textField; 
} 

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath { 
    // if (indexPath equal to something then) 
    [self.activeTextField resignFirstResponder]; 
} 
3

la adición de un reconocedor del grifo gesto es una solución interesante, pero hay una alternativa y que no tienen que codificar nada!

Puede configurar en Interface Builder la propiedad keyboardDismissMode para "Descartar al arrastrar" para su vista de tabla. Es una propiedad heredada de UIScrollView y cada vez que se desplaza por la vista de tabla, el teclado se descarta.

Cuestiones relacionadas