2012-03-12 12 views
5

Estoy usando un SplitViewController que no puede ser parte de un controlador de navegación. Estoy usando SetRootViewController en un IBAction, lo cual está bien, pero no está animado. Idealmente, me gustaría utilizar la misma animación que hace el controlador de navegación (deslizar desde la izquierda/derecha) pero si eso no es posible, me gustaría usar una animación consistente siempre que necesite hacer esto.¿Se puede animar setRootViewController?

+0

¿Puede dar más detalles sobre lo que quiere? ¿Desea animar UISplitViewController como UINavigationController cuando y dónde? –

+0

El Svc se carga desde una ibaction en la primera pantalla, un controlador de vista después de que un usuario hace clic en un botón. Quiero que el Svc se anime, ya sea un empuje o una disolución cruzada o algo así. – glenstorey

Respuesta

5

No estoy seguro de esto, pero sugeriría lo siguiente.

Conjunto del UISplitViewController como sus UIWindow 's rootViewController. En el viewDidLoad, realiza una llamada presentModalViewController:animated: con el botón UIViewController como modal. Asegúrate de no animarlo. Esto le da la ilusión de que la vista modal es la primera que ve cuando se inicia la aplicación. Cuando presiona el botón, anima el botón UIViewController con dismissModalViewControllerAnimated:. Ahora puedes elegir cómo animar. Una de tus elecciones es cruzar el flujo.

+0

Esa es una solución realmente creativa, la probaré y le contaré cómo me llevo. – glenstorey

+0

Esto funcionaría, y es una gran manera de abordar el problema, para que obtengas la respuesta correcta, pero no estoy seguro de si realmente lo usaré. Se siente un poco desordenado y rompe el flujo de diseño previsto un poco; especialmente porque el SVC solo se usa en una parte de la aplicación. – glenstorey

+0

@Dries De Smet-- intenté con lo que sugería, escribí el código para presentModalViewController: animado: en el ViewDidLoad del Svc y lo descarté en btnClick ... pero cuando se descarta el VC y se presenta Svc el Svc ViewDidLoad: es llamado de nuevo como resultado de presentModalViewController: animado: siendo llamado, y el Vc se muestra de nuevo. Estoy haciendo algo mal. – Bonnie

2

Usando iOS 5.0 podrá usar presentViewController:animated:completion para presentar SplitViewController desde su rootViewController inicial.

iOS anterior 5.0 su única posibilidad es utilizar el método transitionFromView:toView:duration:options:completion en la vista de rootViewController, lo que significa que tendrá que esforzarse para pasar varios mensajes a su SplitViewController manualmente. iOS anterior 5.0 no es compatible con contenedores ViewControllers.

Pero probablemente desee replantear su diseño. Debe establecer SplitViewController como rootViewController inicialmente. Al iniciar la aplicación (o siempre que lo necesite) debe presentar su LoginViewController de forma modal. Cuando el usuario inicia sesión con éxito, oculta su vista modal con la animación que desee.

Dado que SplitViewController es su ViewController principal, debe ser el controlador raíz de su aplicación.

+0

Su solución es correcta, pero no estoy de acuerdo con el replanteamiento del diseño. Lo que está tratando de hacer es absolutamente lógico. En muchas situaciones, su solución sugerida no funcionaría. Usamos el mismo diseño, escribiendo nuestro propio mecanismo de cambio de pantalla y nuestro propio controlador de vista dividida (que es realmente muy fácil). – Sulthan

+1

Gracias por su respuesta Ben-G. Cuando intento [appDelegate.window setRootViewController: splitViewController]; [splitViewController presentViewController: splitViewController animado: YES finalización: NULL]; Aparece el error 'La aplicación intentó presentar un Split View Controllers modally .'. Supongo que estoy usando la sintaxis incorrecta en alguna parte. Estoy de acuerdo con @Sulthan con respecto a las decisiones de diseño que he tomado, pero gracias por la sugerencia. – glenstorey

+0

En relación con [link] (http://stackoverflow.com/questions/2579861/split-view-controller-must-be-root-view-controller), SplitViewController es un caso especial que no se puede presentar de forma modal. Lamentablemente, tendrá que ir con la solución alternativa o usar el método 'transitionFromView: toView:', manejando el mensaje que pasa al splitViewController por su cuenta. –