2011-08-23 19 views
9

Debe haber algo básico que me falta aquí. Tengo un UIScrollView abierto, que está controlado por un cliente UIScrollViewController (llamado DataController). En un cierto punto en el tiempo, es necesaria la entrada del usuario, por lo que abrir una UIViewController modal de la DataController:Descartar cambios de vista modal subyacentes a UIScrollView

ElementSelectController *viewController = [[ElementSelectController alloc] initWithNibName:@"ElementSelectController" bundle:nil]; 
viewController.modalTransitionStyle = UIModalTransitionStyleCoverVertical; 
viewController.theDelegate = self; 
[self presentModalViewController:viewController animated:YES]; 

Una vez que el usuario está listo con la vista modal, es despedido de nuevo. Esto también ocurre desde DataController:

[self dismissModalViewControllerAnimated:YES]; 

Todo funciona bien. Pero cuando la vista modal se va, resulta que el UIScrollView subyacente se redimensiona a pantalla completa, y se desplaza a la posición (0,0). Este es el caso incluso con una vista modal simple que no hace más que descartar. Obviamente, quiero que UIScrollView permanezca en el mismo estado y tamaño que antes de que apareciera la vista modal.

¿Alguna idea de lo que estoy haciendo mal?

he comprobado el seguimiento de la pila cuando se establece el marco UIScrollView (a través de un punto de ruptura en setFrame: de una costumbre UIScrollView), y parece que se llama a partir de:

-[UITransitionView transition:fromView:toView:] 

que se llama a través de , a través de la llamada dismissModalViewControllerAnimated.

+0

No sé por qué sucede eso, pero siempre puedes almacenar UIScrollView contentOffset y restablecer si después de que el modal desaparece. – NWCoder

+0

Por favor, muestre algunos de sus códigos de viewwillappear ... –

+0

Gracias. Eso es lo que hago ahora como una solución alternativa. Guardo el marco y el contentOffset de UIScrollView, y los reinicio inmediatamente después de la llamada de descarte. Eso parece funcionar, pero se siente como un truco. Me gustaría saber cuál es la forma normal de manejar esto. – fishinear

Respuesta

1
-[UITransitionView transition:fromView:toView:] 

Es perfectamente normal para la transición del modal a su vista. Esta es la animación, etc., prueba modal con animación si crees que eso puede marcar la diferencia.

Tome un vistazo a su viewWillAppear, WillDisappear, DidAppear... Incluso el Load y Unload en su caso, poco probable, aunque los que son llamados para su prueba trivial con nada en el modal. Intente colocar un registro en esos métodos para ver cuál se llama.

¿También está diciendo que no hay un código personalizado en esos métodos o que su controlador no los reemplaza en absoluto? Podría marcar la diferencia.

Cuestiones relacionadas