2010-10-04 17 views
7

Para una aplicación que estoy diseñando para el iPad, tengo una vista de desplazamiento con algunos campos de texto/vistas de texto en ella. Para mantener todo visible, ajusto la propiedad contentSize de la vista de desplazamiento para agregar un búfer en la parte inferior que corresponde a cuánto se superpone el teclado a la vista de desplazamiento. Aquí está el código (hay algunas cosas específicas de la aplicación aquí, pero espero que no tanto que no se puede hacer sentido de ella):Obtener el tamaño del teclado en pantalla del iPad después de la rotación

- (void)viewWillAppear:(BOOL)animated 
{ 
    [super viewWillAppear:animated]; 

    NSNotificationCenter *nc = [NSNotificationCenter defaultCenter]; 
    [nc addObserver:self selector:@selector(keyboardWillShow:) name:UIKeyboardWillShowNotification object:nil]; 
    [nc addObserver:self selector:@selector(keyboardWillHide:) name:UIKeyboardWillHideNotification object:nil]; 
} 


- (void)viewWillDisappear:(BOOL)animated 
{ 
    [super viewWillDisappear:animated]; 

    NSNotificationCenter *nc = [NSNotificationCenter defaultCenter]; 
    [nc removeObserver:self name:nil object:nil]; 
} 

- (void)keyboardWillShow:(NSNotification *)aNotification 
{ 
    NSValue *animationCurve = [[aNotification userInfo] valueForKey:UIKeyboardAnimationCurveUserInfoKey]; 
    UIViewAnimationCurve curve; 
    [animationCurve getValue:&curve]; 

    NSValue *animationDuration = [[aNotification userInfo] valueForKey:UIKeyboardAnimationDurationUserInfoKey]; 
    NSTimeInterval duration; 
    [animationDuration getValue:&duration]; 

    NSValue *endingFrame = [[aNotification userInfo] valueForKey:UIKeyboardFrameEndUserInfoKey]; 
    CGRect frame; 
    [endingFrame getValue:&frame]; 

    [UIView beginAnimations:@"keyboardWillShow" context:bodyView]; 
    [UIView setAnimationCurve:curve]; 
    [UIView setAnimationDuration:duration]; 

    // Re-draw code here. 

    [UIView commitAnimations]; 
} 

- (void)keyboardWillHide:(NSNotification *)aNotification 
{ 

    NSValue *animationCurve = [[aNotification userInfo] valueForKey:UIKeyboardAnimationCurveUserInfoKey]; 
    UIViewAnimationCurve curve; 
    [animationCurve getValue:&curve]; 

    NSValue *animationDuration = [[aNotification userInfo] valueForKey:UIKeyboardAnimationDurationUserInfoKey]; 
    NSTimeInterval duration; 
    [animationDuration getValue:&duration]; 

    [UIView beginAnimations:@"keyboardWillHide" context:bodyView]; 
    [UIView setAnimationCurve:curve]; 
    [UIView setAnimationDuration:duration]; 

    // Re-draw code here 

    [UIView commitAnimations];  
} 

Mi pregunta es la siguiente: ¿qué hago sobre el tamaño del teclado durante la rotación? No recibo ninguna notificación de teclado cuando se gira el iPad, pero el tamaño del teclado cambia significativamente. Lo ideal sería simplemente ajustar la altura de la propiedad contentSize por la cantidad en que el teclado se superpone en el modo horizontal, pero no veo una buena manera de hacerlo sin tener que codificar la altura del teclado en ambas orientaciones, lo que hago no quiero hacer

Respuesta

16

Accidentalmente descubrí la respuesta a esta depuración de otra cosa. Resulta que cuando el iPad gira de vertical a horizontal, el teclado del portátil se esconde (y envía su notificación) justo antes de que aparezca el teclado horizontal (y envía su notificación). Por lo tanto, mientras lo explique, está bien.

Cuestiones relacionadas