2009-06-24 19 views
6

He estado moviendo una vista de alerta ligeramente más alta para que pueda colocar un teclado en la pantalla también. Simplemente hago esto agarrando el marco de la alerta y cambiando la Y después de que ya he mostrado la alerta para que las variables de cuadro sean legítimas. Esto funciona bien en el simulador, pero cuando hago esto en el hardware, la alerta comienza en la posición correcta, pero luego casi de inmediato salta a su lugar central vertical original. ¿La posición de UIAlertView es algo fijo que no debería cambiar según las pautas de usabilidad o simplemente estoy haciendo algo incorrectamente?¿Puedo mover un UIAlertView?

Gracias!

Respuesta

22

¿que os tratando esto en contra? Tengo que esto funcione tanto en el simulador OS 3.0 y OS 3.0 Dispositivo:

UIAlertView * alert = [ [ UIAlertView alloc ] initWithTitle:@"Alert" message:@"Alert" 
         delegate:self cancelButtonTitle:@"OK" otherButtonTitles:nil ]; 

alert.transform = CGAffineTransformTranslate(alert.transform, 0.0, 100.0); 

[ alert show ]; 

CGAffineTransformTranslate tiene tres argumentos: la transformación existente, una x transformar, y una y transformación. En el ejemplo que utilicé, la vista de alerta apareció 100 píxeles más alta de lo normal. Pruébalo y mira qué pasa.

Además, estoy bastante seguro de que puede modificar el marco antes de mostrar la alerta, ya que probablemente configure el marco de la alerta en init para que sea el centro de toda la pantalla de forma predeterminada.

+0

Gracias a la transformación fue el truco, por alguna razón moverlo usando las coordenadas del marco fue el problema. – Skyler

+0

me funcionó en iOS 3.0, pero por alguna razón no funciona en iOS 4.0 ... –

1

No es una alerta destinada a ser modal - es decir: ¿no realizaría generalmente ninguna otra entrada de usuario mientras una alerta está activa? Si este es el caso, ¿por qué necesitarías visibilidad del teclado?

+3

Si él tiene un campo de texto añadido como una vista secundaria de la opinión de alerta, que tiene sentido querer ver el teclado al igual que la App Store hace cuando se le pide su contraseña de iTunes antes de descargar una aplicación. – LucasTizma

+0

Gracias por el comentario. No había pensado en ese escenario. – teabot

2

Desde iOS4 moverse UIAlertViews se complica. Me he dado cuenta de que si agrega una subvista UITextField en UIAlertView, en iOS4 la alerta se mueve hacia arriba para que el teclado no se superponga. Esto no ocurre < iOS4.

También he notado que el marco de la alerta no se inicializa incluso después de llamar al show, por lo que no hay una forma de programación fácil de realizar una CGAffineTransformation relativa. La única solución sería hacer transformaciones condicionales basadas en la versión del sistema operativo.

Para mí esto se ve como el roscado sobre el comportamiento no documentado de UIAlertViews que está sujeta a cambios en cualquier momento. No creo que Apple quisiera que usemos las alertas para nada más que textos y botones (aunque sus propias aplicaciones rompan esta regla).

Por mi parte, voy a empezar a construir mis propias alertas personalizadas para este tipo de escenarios.