Esto es muy de novato pregunta. Tengo un UIToolBar en la parte inferior, que se supone animadamente moverse hacia arriba y hacia abajo con la tecla de la junta cuando el UIKeyBoard se muestra. Tengo que trabajar con la ayuda de UIKeyBoard Notificaciones. La vista que estamos hablando ha dividido activado de la vista. Cuando el dispositivo de orientación es horizontal, tanto las opiniones como las columnas se muestra [espero que tenga sentido].

Cuando la tecla de la junta se muestra, hago este

CGSize keyBoardSize = [[notificationInfo objectForKey:UIKeyboardFrameEndUserInfoKey]CGRectValue].size;

CGRect toolbarFrame= [BottomToolBar frame];
toolbarFrame.origin.y -= keyBoardSize.height;    
[UIView beginAnimations:nil context:nil];
[UIView setAnimationDuration:0.3];
BottomToolBar .frame = viewFrame;
[UIView commitAnimations];

cuando la tecla de la junta es hiiden hago esto

toolbarFrame.origin.y += keyBoardSize.height;

Mi Problema es que cuando el dispositivo de orientación de los cambios en el paisaje, cuando la clave de la junta es visible la parte inferior de la barra de herramientas se ha ido. Veo que se mueva rápidamente. No estoy seguro de cómo solucionar este problema. Alguien puede ayudar por favor? También, hay una manera de NO hacer la clave de la junta de abarcar tanto las vistas en la vista dividida?

InformationsquelleAutor Dave | 2010-03-19

6 Comentarios

  1. 10

    Tengo este problema, todo lo que puedo pensar es desestimar el teclado y el repuesto grandes títulos del cine es (dimitir y, a continuación, convertirse en la primera respuesta de nuevo). Pero eso parece muy poco satisfactorio.

    Nota también debe ser la conversión de la rect a partir de las coordenadas de pantalla a la vista de las coordenadas. (Las coordenadas de la pantalla no rota.)

    CGRect keyboardRect = [[notificationInfo objectForKey:UIKeyboardFrameEndUserInfoKey]CGRectValue];
    keyboardRect = [[BottomToolBar superview] convertRect:keyboardRect fromView:nil];

    ACTUALIZACIÓN: debe registrarse para UIKeyboardWillShowNotification, entonces su acción será llamado cuando el interfaz de la gira 🙂

    Vea también:
    https://devforums.apple.com/message/181482#181482

    • Esta conversión es esencial si usted está tratando de mantener una barra de herramientas sobre el teclado del marco y de la Llamada Barra de Estado muestra. Usted puede comprobar esto en el simulador con el comando de teclado CMD + Y
  2. 6
    - (void)viewDidLoad {
    [super viewDidLoad];
    [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(keyboardWillShow:) name:UIKeyboardWillShowNotification object:nil];
    [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(keyboardWillHide:) name:UIKeyboardWillHideNotification object:nil];
    }
    - (void)keyboardWillShow:(NSNotification *)aNotification 
    {
    CGRect keyboardBounds;
    [[aNotification.userInfo valueForKey:UIKeyboardFrameEndUserInfoKey] getValue: &keyboardBounds];
    CGFloat keyboardHeight;
    switch ([UIApplication sharedApplication].statusBarOrientation) {
    case UIInterfaceOrientationPortrait:
    case UIInterfaceOrientationPortraitUpsideDown:
    keyboardHeight = keyboardBounds.size.height;
    break;
    case UIInterfaceOrientationLandscapeLeft:
    case UIInterfaceOrientationLandscapeRight:
    keyboardHeight = keyboardBounds.size.width;
    break;
    }
    NSTimeInterval animationDuration = [[[aNotification userInfo] objectForKey:UIKeyboardAnimationDurationUserInfoKey] doubleValue];
    CGRect rect = table.frame;
    rect.size.height -= keyboardHeight;
    [UIView beginAnimations:@"ResizeForKeyboardShow" context:nil];
    [UIView setAnimationDuration:animationDuration];
    table.frame = rect;
    [UIView commitAnimations];
    }
    - (void)keyboardWillHide:(NSNotification *)aNotification
    {
    CGRect keyboardBounds;
    [[aNotification.userInfo valueForKey:UIKeyboardFrameEndUserInfoKey] getValue: &keyboardBounds];
    CGFloat keyboardHeight;
    switch ([UIApplication sharedApplication].statusBarOrientation) {
    case UIInterfaceOrientationPortrait:
    case UIInterfaceOrientationPortraitUpsideDown:
    keyboardHeight = keyboardBounds.size.height;
    break;
    case UIInterfaceOrientationLandscapeLeft:
    case UIInterfaceOrientationLandscapeRight:
    keyboardHeight = keyboardBounds.size.width;
    break;
    }
    NSTimeInterval animationDuration = [[[aNotification userInfo] objectForKey:UIKeyboardAnimationDurationUserInfoKey] doubleValue];
    CGRect rectTable = table.frame;
    rectTable.size.height += keyboardHeight;
    [UIView beginAnimations:@"ResizeForKeyboard" context:nil];
    [UIView setAnimationDuration:animationDuration];
    table.frame = rectTable;
    [UIView commitAnimations];
    }
    • no te olvides de [[NSNotificationCenter defaultCenter] removeObserver:auto]; en viewDidUnload y dealloc
    • Para su INFORMACIÓN: Usted puede utilizar la mano UIDeviceOrientationIsPortrait macro en lugar de que las grandes switch y case monstruo. 🙂
  3. 4

    UITextFields tener un inputAccessoryView propiedad que permite la adición de un UIToolBar por encima de la UIKeyboard.

    • Sí, pero el OP quiere la barra de herramientas para ser visible en la parte inferior de la pantalla cuando el teclado está oculto.
    • No hay problema, sólo tienes que ajustar la barra de herramientas en la parte inferior como la inputAccessoryView y listo.
  4. 2
    - (void)viewDidLoad { //Or somewhere else
    [super viewDidLoad];
    [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(kbDidChange:) UIKeyboardDidChangeFrameNotification object:nil];
    }
    - (void)kbDidChange:(NSNotification *)notification {
    NSDictionary* keyboardInfo = [notification userInfo];
    CGRect keyboardFrame = [[keyboardInfo valueForKey:UIKeyboardFrameEndUserInfoKey] CGRectValue];
    keyboardFrame = [[messageBar superview] convertRect:keyboardFrame fromView:nil];
    CGRect ol = messageBar.frame; //messageBar is your UIToolbar..
    ol.origin.y = keyboardFrame.origin.y-44;
    messageBar.frame = ol;
    }
    • Cualquier posibilidad de que usted podría considerar la posibilidad de explicar este código, y por qué no contesta a la pregunta en la mano?
  5. 0

    Estas respuestas funcionan bien, excepto para teclados externos. Cuando un teclado de hardware está presente, se parece a la «altura» de propiedad del teclado marco transmitido en el mensaje sigue siendo el mismo como lo sería con un teclado virtual, es decir, este código resta la altura de la vista del marco para un inexistente teclado (la creación de un torpe espacio).

    La mejor solución que he encontrado es de notar que la «y» de propiedad del teclado marco se especificó en la parte inferior de la pantalla (lo que implica que el teclado virtual es en realidad la actualidad, sólo fuera de la pantalla).

  6. 0

    La solución es configurar la opción UIViewAnimationOptionBeginFromCurrentState para el bloque de animación basado en, o

    [UIView beginAnimations:nil context:nil];
    [UIView setAnimationDuration:[notificationInfo objectForKey:UIKeyboardAnimationDurationUserInfoKey] floatValue]];
    [UIView setAnimationBeginsFromCurrentState:YES];
    BottomToolBar.frame = viewFrame;
    [UIView commitAnimations];

    en su caso. A continuación, la opinión de no obtener un movimiento brusco cuando el cambio de orientación de vertical a horizontal.

Dejar respuesta

Please enter your comment!
Please enter your name here