2011-05-18 21 views
11

Implementé el campo de texto con un teclado personalizado con la función "setInputView". Pero tengo un problema: mi marco de teclado no es un marco estándar de teclado de iphone.Teclado personalizado: inputView: cómo cambiar el tamaño del teclado?

La pregunta es: ¿Cómo puedo cambiar el tamaño de mi teclado personalizado? Conozco algunas funciones como: UIKeyboardFrameBeginUserInfoKey, ..etc.

Nota: El marco del teclado iPhone es = 0264320216 Mi marco del teclado personalizado es = 0,0,320,460

Con la esperanza de que su amable colaboración, Saludos ... P

Respuesta

2

tuve la el mismo problema. Lo resolví registrándome en UIKeyboardDidShowNotification (desafortunadamente, UIKeyboardWillShowNotification no funcionó) y luego cambié el tamaño de la vista después de que se mostrara el teclado. Sin embargo, todavía tenía la caja blanca en la parte superior del teclado cuando se movía hacia arriba. Esto funcionó bien para mí porque está llegando a través de una UITextView con fondo blanco. Sin embargo, si entraras por encima de otros objetos de colores, se vería un poco desagradable antes de que la vista se redimensionara correctamente. Puede resolverlo estableciendo el color de fondo en clearColor.

// Add this while initializing your view 
self.backgroundColor = [UIColor clearColor]; // Needed because we can't resize BEFORE showing the view. Otherwise you will see an ugly white box moving up w/ the keyboard 
[[NSNotificationCenter defaultCenter] addObserver:self 
             selector:@selector(keyboardWasShown:) 
              name:UIKeyboardDidShowNotification object:nil]; 



// Called when the UIKeyboardDidShowNotification is sent. 
- (void)keyboardWasShown:(NSNotification*)aNotification 
{ 

    CGRect rect = self.frame; 
    rect.size.height = 164; 
    self.frame = rect; 

} 
27

Resulta que el comportamiento por defecto de la vista de entrada a medida que se asigna a la propiedad del UITextField 's es cambiar el tamaño de la vista en el mismo marco que el teclado por defecto. Pruebe a establecer (utilizo el nombre InputViewController para mi vista de entrada, pero se puede usar lo que quieras):

inputViewController = [[InputViewController alloc] initWithNibName:@"InputViewController" bundle:nil]; 
inputViewController.delegate = self; 
inputViewController.view.autoresizingMask = UIViewAutoresizingNone; // This is the code that will make sure the view does not get resized to the keyboards frame. 

Para obtener información más detallada, se puede ver en this link, que es proporcionada por de Apple:.

Si UIKit encuentra una vista de entrada con un valor UIViewAutoresizingFlexibleHeight en su máscara de aumento de tamaño, cambia la altura para que coincida con el teclado.

Hope that Helps!

+0

Gr8 ayuda. Thax. –

+0

Eso hace el truco. – Wollan

+0

@msgambel He establecido autoresizingMask en UIViewAutoresizingNone para mi inputView, pero aún así cambia de tamaño en el marco del teclado. ¿Me pueden ayudar en esto, por favor? Http://stackoverflow.com/questions/13394564/ios-customise-uitextfields-inputview-size – applefreak

0

Para mí, la solución de msgambel no funcionó. Pero el enfoque correcto, estaba jugando con inputView autoresizingMask. El ex tuve configuración diferente, pero de la manera correcta para evitar el espacio blanco extra sobre el teclado personalizado es:

enter image description here

que aplica esto sólo por la vista exterior.

enter image description here

9

Para establecer el inputView teclado con el mismo tamaño que el teclado nativo simplemente hacer esto:

inputView.autoresizingMask = UIViewAutoresizingFlexibleHeight; 

Para establecer su propio marco ello:

inputView.autoresizingMask = UIViewAutoresizingNone; 

From Apple:

Tiene mucha flexibilidad para definir el tamaño y el contenido de una vista de entrada o una vista de entrada de accesorio. Aunque la altura de estas vistas puede ser la que le gustaría, deberían tener el mismo ancho que el teclado del sistema. Si UIKit encuentra una vista de entrada con un valor UIViewAutoresizingFlexibleHeight en su máscara de aumento de tamaño, cambia la altura para que coincida con el teclado. No hay restricciones en la cantidad de vistas (como controles) que pueden tener las vistas de entrada y las vistas de accesorios de entrada. Para obtener más información sobre las vistas de entrada y las vistas de accesorios de entrada, consulte las Pautas de interfaz humana de iOS.

+1

y tenemos un ganador! –

+0

Para mí no está funcionando. Establecí inputView.autoresizingMask = []; Y aún muestra la altura predeterminada del teclado. – Ramis

+0

@Ramis lo configura para ninguno –

0

Además, si usted está usando un UIViewController para diseñar su inputView, no utilice el UIViewController.view ... que parece tener una gran cantidad de problemas para conseguir cambiar el tamaño de forma incorrecta en rotación independientemente de la AutoresizeMask.

Lo que funcionó para mí fue tomar mi interfaz de usuario existente y usar Editor> Incrustar en> Ver. Luego crea una nueva salida y pasa esa salida como la entradaView. De repente, el tamaño de los errores de rotación desapareció.

Cuestiones relacionadas