2011-05-27 17 views
8

Tengo una aplicación con UISplitViewController, cuando lance la aplicación en el modo potrait, falta el "Grupo" UIBarButtonItem. Necesito pasar al modo paisaje y volver a potrait para que aparezca. Cuando lo lance en modo paisaje, está allí. He aquí alguna captura de pantalla para que quede claro:UISplitViewController modo retrato que falta UIBarButtonItem

Esto es cuando la aplicación se inicia en el modo de retrato enter image description here

Esto es en modo horizontal, después de girar desde el modo vertical: enter image description here

Esto es después volviendo al modo vertical desde el modo horizontal: enter image description here

+0

¿Cómo estás configurar esto? –

Respuesta

4

Me pasó lo mismo hace un par de días. Solo tiene que asegurarse de que la vista de detalles sea delegada de splitView. Si intenta configurar el delegado en la vista detallada viewDidLoad, no se establecerá hasta después de que se cargue splitView (con el controlador raíz tableView). Es por eso que no se coloca hasta que cambie al paisaje y viceversa. La mejor manera de establecer el delegado es ya sea en su archivo de implementación delegado de la aplicación (cuando se crea la UISplitViewController, lo que sería la mejor idea) o en el controlador de tableView raíz con algo así como

- (void)viewDidLoad { 
    self.splitViewController.delegate = [self.splitViewController.viewControllers objectAtIndex:1]; 
} 

Eso hace que la vista detallada delegar, así que cuando se carga después de cargar el controlador tableView, llamará a su método splitViewController:willHideViewController:....

Por supuesto, esta puede no ser la situación que tiene. Solo estoy asumiendo que, dado que tenía el mismo comportamiento, probablemente sea la misma causa. Si esto no soluciona el problema, solo dígalo y nos pondremos en contacto con la causa

+0

También parece funcionar de manera consistente si está configurado en el xib que lo genera. –

+0

Esto es muy cierto. Si puede evitar la creación de splitViewController programáticamente, hará que la vida sea mucho más fácil ya que configura todo esto para usted. Esta es solo una solución para los casos en que necesita crearla programáticamente sin la ayuda de IB – justin

0

No pude resolver este problema, ya que mi código y conexiones IB parecían idénticas a la fuente de muestra de múltiples vistas de detalles de Apple el código tenia

que era capaz de conseguir que funcione correctamente al cambiar la referencia de self.splitViewController (una propiedad de la clase del controlador de vista de la izquierda) en la segunda a la última línea de la SVC aprobada en forma automática con el método . Me había dado cuenta en el depurador de que el primero no había sido instanciado todavía por alguna razón. (la ubicación de la memoria era 0x00000000).

- (void)splitViewController:(UISplitViewController*)svc willHideViewController:(UIViewController *)aViewController withBarButtonItem:(UIBarButtonItem*)barButtonItem forPopoverController:(UIPopoverController*)pc { 

// Keep references to the popover controller and the popover button, and tell the detail view controller to show the button. 
barButtonItem.title = @"Menu"; 
self.popoverController = pc; 
self.rootPopoverButtonItem = barButtonItem; 
UIViewController <SubstitutableDetailViewController> *detailViewController = [self.splitViewController.viewControllers objectAtIndex:1]; 
[detailViewController showRootPopoverButtonItem:rootPopoverButtonItem]; 

}

Cuestiones relacionadas