2012-07-03 14 views
9

Tengo un UITableViewController con un UITableView estático agrupado. Estoy definiendo las celdas para mi vista de tabla estática en el guión gráfico. Una de las celdas tiene un campo de texto. Cuando se llama a este campo de texto, el teclado aparece, sin embargo, la vista de tabla no se cambia automáticamente de tamaño como lo haría normalmente en un controlador de vista de tabla. Entonces, el teclado está cubriendo parcialmente el campo de texto y no puedo desplazarme hacia arriba.UITableViewController y el teclado UITextField

Según tengo entendido, cuando utilice un UITableViewController y una vista de tabla, el área visible se reducirá automáticamente cuando se llame al teclado. Funciona según lo previsto en otras partes de mi aplicación, simplemente no con esta vista de tabla estática. ¿No funciona con tablas estáticas? ¿Hay algo más que me estoy perdiendo? ¿Hay alguna manera fácil de resolver esto?

Gracias

+0

Puede mover la vista hacia arriba o cambiar el tamaño manualmente. – Dustin

+1

La pregunta es ¿por qué no lo está haciendo automáticamente cuando normalmente lo hace? – Keith

+0

Probablemente porque está utilizando una vista de tabla estática (como ha adivinado). Las vistas de tabla estática están diseñadas específicamente para no cambiar, por lo que se llaman "estáticas" – Dustin

Respuesta

48

respuesta

No tiene nada que ver con las células estáticas. Deberían funcionar

Si su controlador ya es un UITableViewController, verifique si utilizó el método viewWillAppear. Si lo hizo, debe llamar al [super viewWillAppear:YES] para que funcione el 'comportamiento automático'.

-(void)viewWillAppear:(BOOL)animated { 
    [super viewWillAppear:YES]; // This line is needed for the 'auto slide up' 
    // Do other stuff 
} 

Este problema se convierte con facilidad debido a que el código estándar para los controladores no vienen con la llamada viewWillAppear método y si se define en su controlador, que lo sustituya.

Información adicional

mirada a este enlace.

Apple Table View Programming Guide

Nota: UITableViewController tiene nuevas capacidades en IOS 3.0. Un controlador de vista de tabla admite edición en línea de filas de vista de tabla; Si, por ejemplo, las filas se han incorporado campos de texto en el modo de edición, que se desplaza la fila que se está editando sobre el teclado virtual que aparece .... bla ....

la parte importante

la clase UITableViewController implementa el comportamiento anterior por loadView imperiosas, viewWillAppear :, y otros métodos heredados de UIViewController. En su subclase de UITableViewController, puede también anular estos métodos para adquirir un comportamiento especializado.Si lo hace anule estos métodos, asegúrese de invocar la implementación de la superclase del método, generalmente como la primera llamada al método, para obtener el comportamiento predeterminado.

+0

Descubrí no mucho después de publicar esto aquí que no tenía nada que ver con la tabla estática. Creé una tabla estática de prueba y funcionó bien, así que sabía que era algo con mi código. Usted era 100% correcto. Fue el [super viewWillAppear: YES] ;. Tan pronto como agregue eso a mi vista WillAppear funcionó. Supongo que de alguna forma se borró. Temía arreglar esta semana y resultó ser realmente fácil. Gracias – Keith

+1

Cheers man. Su pregunta me señaló los documentos y aprendí otro gotcha =) –

+1

Gran respuesta, escandaloso que no ha tenido más votos. Aquí hay uno de todos modos. –

0

empuja a la vista cuando uno de los formularios tabla se selecciona para su edición (requiere la aplicación de notificación teclado)

- (void) keyboardDidShow:(NSNotification *)aNotification 
{ 
    [UIView beginAnimations:nil context:NULL]; 
    [UIView setAnimationDuration:0.25]; 
    self.view.center = CGPointMake(self.view.center.x, self.view.center.y-moveAmount); 
    [UIView commitAnimations]; 
    isRaised = [NSNumber numberWithBool:YES]; 
} 

Cambia el tamaño de la mesa (altura divide por 2). Cambiar esto en el teclado mostró el método. Además, puedes usar el teclado para ocultar este método.

CGRect temp = CGRectMake(mineTable.frame.origin.x, mineTable.frame.origin.y, mineTable.frame.size.width, mineTable.frame.size.height/2); 
mineTable.frame = temp; 
+1

¿Es esta la respuesta completa? Parece que faltan algunas cosas. – Keith

+0

Bueno, no quería mostrarte un montón de cosas que ya sabes cómo codificar. Te dije qué hacer (implementar notificaciones de teclado). Es solo un código de ejemplo para apuntarlo en la dirección correcta. – Dustin

1

Para Swift

override func viewWillAppear(animated: Bool) { 

    super.viewWillAppear(animated) 

} 
Cuestiones relacionadas