estoy usando un UISplitViewController
dentro de un UITabBarController
con una llanura UIViewController
en el panel principal de la vista dividida y una UINavigationController
en el panel de detalles, que a su vez contiene una vainilla UIViewController
.métodos de delegado UISplitViewController no llaman
Soy consciente de que Apple recomienda usar vistas divididas solo en el nivel raíz, sin embargo, he visto otras aplicaciones (por ejemplo, la pestaña Amazon 'Wish List') que usan vistas divididas en pestañas, así que estoy seguro de que es posible .
Mi problema es que los métodos delegados de la vista dividida, es decir. aquellos en UISplitViewControllerDelegate
no reciben llamadas, lo que me impide crear mi menú emergente al cambiar al modo de retrato.
Los métodos en cuestión son los siguientes -
// Called when a button should be added to a toolbar for a hidden view controller
- (void)splitViewController: (UISplitViewController*)svc willHideViewController:(UIViewController *)aViewController withBarButtonItem:(UIBarButtonItem*)barButtonItem forPopoverController: (UIPopoverController*)pc;
// Called when the view is shown again in the split view, invalidating the button and popover controller
- (void)splitViewController: (UISplitViewController*)svc willShowViewController:(UIViewController *)aViewController invalidatingBarButtonItem:(UIBarButtonItem *)barButtonItem;
// Called when the view controller is shown in a popover so the delegate can take action like hiding other popovers.
- (void)splitViewController: (UISplitViewController*)svc popoverController: (UIPopoverController*)pc willPresentViewController:(UIViewController *)aViewController;
El UISplitViewController
hace recibir las notificaciones de rotación.
puedo conseguir el método willShowViewController que se llamará si fuerzo la orientación barra de estado a la derecha del paisaje (o izquierda) al comienzo de la puesta en marcha de aplicaciones, utilizando
[[UIApplication sharedApplication] setStatusBarOrientation:UIInterfaceOrientationLandscapeRight];
Sin embargo, los willHideViewController
doesn ser llamado. Y no quiero obligar a la aplicación a comenzar en el paisaje. Si hago lo mismo pero lo fuerzo a retratar, no recibo las devoluciones de llamada.
No entiendo por qué el controlador de vista dividida no está llamando a sus métodos de delegado cuando se está comportando correctamente. Estos métodos deben ser llamados desde su método-
- (void)willRotateToInterfaceOrientation:(UIInterfaceOrientation)toInterfaceOrientation duration:(NSTimeInterval)duration
internamente, y cuando este punto de interrupción en el interior, puedo comprobar que el delegado está establecido y que aún está vivo.
¡Estuve atascado en esto todo el día! Todo lo demás funciona muy bien y estoy muy contento de que la combinación splitview/tabbar/navbar funcione bien. Solo necesito estas notificaciones.
¿Debería simplemente llamarlos manualmente cuando gire? Parece muy incorrecto cuando el `UISplitViewController 'debería estar haciendo esto.
Hola, ¿te importaría elaborar tu solución un poco más? Tengo el mismo problema en este momento. Obtuve 1 tabcontroller que tiene una vista dividida en 3 pestañas. Agregué la vista de detalle en cada vista dividida a un controlador de navegación con subclases propio que delega la vista dividida. Esto funciona de manera impecable para la pestaña actualmente visible pero no para las demás. Así que cuando gire mi vista y cambie la pestaña, se ve mal, hasta que la gire. Nuevamente, solo para la vista visible. –
hmm lo siento, no estoy seguro ... estoy seguro de que he visto una publicación aquí en algún lugar que indicaba que cambiar entre pestañas de vista dividida y rotar causaba problemas, y que el splitviwe siempre debería estar al nivel de la ventana, ni siquiera bajo una controlador de pestañas Que está respaldado por los documentos, supongo. De hecho, estoy tomando la ruta de construir mi propio SplitView desde cero ya que necesito divisiones horizontales – Sam
En lugar de intentar desde cero, intente esto - http://mattgemmell.com/2010/07/31/mgsplitviewcontroller-for-ipad – Viraj