texto teclado tamaño predictivo para palabras eliminar diccionario descargar cambiar autocorrector aumentar iphone cocoa-touch

tamaño - teclado iphone descargar



Alinear programáticamente una barra de herramientas sobre el teclado del iPhone (8)

En varios casos, deseo agregar una barra de herramientas en la parte superior del teclado del iPhone (como en iPhone Safari cuando navega elementos de formulario, por ejemplo).

Actualmente estoy especificando el rectángulo de la barra de herramientas con constantes pero debido a que otros elementos de la interfaz están en flujo -barras de herramientas y barras de navegación en la parte superior de la pantalla- cada vez que hacemos un cambio de interfaz menor, la barra de herramientas se desalinea.

¿Hay alguna manera de determinar programáticamente la posición del teclado en relación con la vista actual?


A partir de iOS 3.2 hay una nueva forma de lograr este efecto:

UITextFields y UITextViews tienen una propiedad inputAccessoryView , que puede establecer en cualquier vista, que se muestra automáticamente arriba y animada con el teclado.

Tenga en cuenta que la vista que utiliza no debe estar en la jerarquía de vista en otro lugar, ni debe agregarla a alguna supervista, esto se hace por usted.


Así que básicamente:

En el método init:

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

Y luego tenga los métodos mencionados anteriormente para ajustar la posición de la barra:

-(void) keyboardWillShow:(NSNotification *) note { CGRect r = bar.frame, t; [[note.userInfo valueForKey:UIKeyboardBoundsUserInfoKey] getValue: &t]; r.origin.y -= t.size.height; bar.frame = r; }

Podría hacerlo bonito animando el cambio de posición envolviéndolo en

[UIView beginAnimations:nil context:NULL]; [UIView setAnimationDuration:0.3]; //... [UIView commitAnimations];


Crea este método y llámalo en ViewWillLoad:

- (void) keyboardToolbarSetup { if(self.keyboardToolbar==nil) { self.keyboardToolbar = [[UIToolbar alloc] initWithFrame:CGRectMake(0, 0, self.view.bounds.size.width, 44)]; UIBarButtonItem *cancelButton = [[UIBarButtonItem alloc] initWithTitle:@"Cancel" style:UIBarButtonItemStylePlain target:self action:@selector(anyAction)]; UIBarButtonItem *extraSpace = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemFlexibleSpace target:nil action:nil]; UIBarButtonItem *doneButton = [[UIBarButtonItem alloc] initWithTitle:@"Done" style:UIBarButtonItemStyleDone target:self action:@selector(anyOtherAction)]; NSArray *toolbarButtons = [[NSArray alloc]initWithObjects:cancelButton,extraSpace,doneButton, nil]; [self.keyboardToolbar setItems:toolbarButtons]; self.myTextView.inputAccessoryView=self.keyboardToolbar; } }


En 3.0 y más arriba, puede obtener la duración y la curva de la userInfo diccionario userInfo de las notificaciones.

por ejemplo, para animar el tamaño de la vista para dejar espacio para el teclado, regístrese para UIKeyboardWillShowNotification y haga algo como lo siguiente:

- (void)keyboardWillShow:(NSNotification *)notification { [UIView beginAnimations:nil context:NULL]; [UIView setAnimationCurve:[[[notification userInfo] objectForKey:UIKeyboardAnimationCurveUserInfoKey] intValue]]; [UIView setAnimationDuration:[[[notification userInfo] objectForKey:UIKeyboardAnimationDurationUserInfoKey] doubleValue]]; CGRect frame = self.view.frame; frame.size.height -= [[[notification userInfo] objectForKey:UIKeyboardBoundsUserInfoKey] CGRectValue].size.height; self.view.frame = frame; [UIView commitAnimations]; }

Haz una animación similar para UIKeyboardWillHideNotification .


Esto se basa en la respuesta existente de tonklon : solo estoy agregando un fragmento de código que muestra una barra de herramientas negra semi transparente en la parte superior del teclado, junto con un botón "listo" a la derecha:

UIToolbar *toolbar = [[[UIToolbar alloc] init] autorelease]; [toolbar setBarStyle:UIBarStyleBlackTranslucent]; [toolbar sizeToFit]; UIBarButtonItem *flexButton = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemFlexibleSpace target:self action:nil]; UIBarButtonItem *doneButton =[[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemDone target:self action:@selector(resignKeyboard)]; NSArray *itemsArray = [NSArray arrayWithObjects:flexButton, doneButton, nil]; [flexButton release]; [doneButton release]; [toolbar setItems:itemsArray]; [aTextField setInputAccessoryView:toolbar];

y el -resignKeyboard ve así:

-(void)resignKeyboard { [aTextField resignFirstResponder]; }

Espero que ayude a alguien.



No hay forma (AFAIK) de obtener las dimensiones de la vista del teclado. Sin embargo, es constante, al menos en todas las versiones de iPhone hasta ahora.

Si calcula la posición de la barra de herramientas como un desplazamiento desde la parte inferior de su vista, y toma en cuenta el tamaño de su vista, entonces no debería preocuparse si una barra de navegación está presente o no.

P.ej

#define KEYBOARD_HEIGHT 240 // example - can''t remember the exact size #define TOOLBAR_HEIGHT 30 toolBarRect.origin.y = viewRect.size.height - KEYBOARD_HEIGHT - TOOLBAR_HEIGHT; // move toolbar either directly or with an animation

En lugar de una definición, puede crear fácilmente una función keyboardHeight que devuelve el tamaño en función de si se está mostrando el teclado, y mover esta posición de la barra de herramientas en una función separada que reorganice su diseño.

También puede depender de dónde haga este posicionamiento, ya que es posible que el tamaño de su vista cambie entre la carga y la que se muestra según la configuración de la barra de navegación. Creo que el mejor lugar para hacerlo sería ver aparecer.


Si se registra para notificaciones de teclado, es decir, UIKeyboardWillShowNotification UIKeyboardWillHideNotification , etc., la notificación que reciba contendrá los límites del teclado en el dict de UIKeyboardBoundsUserInfoKey ( UIKeyboardBoundsUserInfoKey ).

Ver la referencia de la clase UIWindow .