ipad - UISplitViewController no muestra el botón emergente al iniciar el retrato
launch portrait (6)
"Kshitiz" tiene el concepto correcto. primero establezco self.splitviewController.delegate = self en el método viewDidLoad, que es un poco tarde para configurar esta delegación. Por lo tanto, traté de establecer la delegación en una etapa anterior, que es el método awakeFromNib. Entonces funciona bien.
Por lo tanto, después de que viewDidLoad ya haya cargado la vista, la delegación no funcionará, funcionará algún tiempo después de algunas actividades (como rotar el iPad). Así que la etapa más temprana que viewDidLoad es awakeFromNib.
Aquí está el código que funciona:
- (void) awakeFromNib{
[super awakeFromNib];
self.splitViewController.delegate = self;
}
Estoy haciendo una aplicación para iPad basada en un UISplitViewController. Tengo un pequeño problema con el botón de toobar cuando mi aplicación se lanzó en potrait. El botón para mostrar la ventana emergente no se muestra. Sin embargo, cuando giro mi iPad en horizontal y luego de vuelta a vertical, ¡el botón muestra!
Parece que el siguiente método no se llama en el lanzamiento (aquí es donde tengo el código que muestra el botón):
- (void)splitViewController:(UISplitViewController *)svc willHideViewController:(UIViewController *)aViewController withBarButtonItem:(UIBarButtonItem *)barButtonItem forPopoverController: (UIPopoverController *)pc
Este método no se llama cuando se inicia la aplicación, sino solo cuando hay una rotación. Lo que es aún más extraño es que hice una aplicación de prueba utilizando la plantilla Xcode UISplitViewController + datos principales (que es similar a la aplicación en la que estoy trabajando, y es la plantilla que usé para hacer esta aplicación). En la aplicación de prueba en la que no he hecho una sola línea de código, el botón muestra cuando ejecuto mi aplicación en modo retrato y el método anterior también se llama al iniciar, a diferencia de mi otra aplicación. ¿Alguien ha tenido un problema similar?
Por último, no queda muy claro a partir de la documentación de Apple si este método debe llamarse cuando se muestra por primera vez un UISplitViewController: http://developer.apple.com/library/ios/#documentation/uikit/reference/UISplitViewControllerDelegate_protocol/Reference/Reference.html%23//apple_ref/doc/uid/TP40009454
¿Ha establecido un delegado del controlador de vista dividida? Generalmente el problema surge cuando el delegado no está configurado.
Estaba teniendo exactamente el mismo problema, y la respuesta de Martin Gunnarsson me llevó a la solución.
Antes, estaba configurando la propiedad de delegado UISplitViewController una vez que la vista de delegado (la vista detallada) ya se había cargado, en viewDidLoad:
Para este momento, el UISplitViewController ya había enviado el inicial splitViewController:willHideViewController:withBarButtonItem:forPopoverController:
message. Simplemente no había puesto al delegado lo suficientemente pronto.
La solución fue asignar el delegado en el delegado de la aplicación principal, en la application:DidFinishLaunchingWithOptions:
En este caso, mi delegado estaba contenido dentro de un controlador de navegación, por lo que tuve que profundizar una capa más para obtenerlo.
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
UISplitViewController *splitViewController = (UISplitViewController *)self.window.rootViewController;
UINavigationController *mainNavigationController = (UINavigationController *)[splitViewController.viewControllers objectAtIndex:1];
HPMainViewController *mainViewController = [mainNavigationController.viewControllers objectAtIndex:0];
splitViewController.delegate = mainViewController;
return YES;
}
Esto me impulsó también, y más aún, ya que estoy trabajando en dos proyectos de iPad con splitViewController listo para usar y el primero siempre muestra el botón ''Maestro'', mientras que el segundo nunca lo hizo. Comparé puntos de venta, relaciones y delegados hasta que me enfadé, pero finalmente encontré la respuesta en la aplicación Abandonar. Resultó que había comentado demasiado en la aplicación: didFinishLaunchingWithOptions :, específicamente donde se establece el splitViewController.delegate.
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
// Override point for customization after application launch.
if ([[UIDevice currentDevice] userInterfaceIdiom] == UIUserInterfaceIdiomPad) {
UISplitViewController *splitViewController = (UISplitViewController *)self.window.rootViewController;
UINavigationController *navigationController = [splitViewController.viewControllers lastObject];
splitViewController.delegate = (id)navigationController.topViewController;
}
Agregar esto al appDelegate le evita tener que subclasificar el splitViewController. También intenté conectar al delegado en IB, pero por alguna razón no tendría nada de eso. Fallo de diseño del guión gráfico, imho.
Estoy teniendo el mismo problema. Mi punto de vista está configurado en IB, y parece que este es un problema de tiempo. El delegado de vista dividida se establece después de que la vista dividida haya notificado la orientación inicial "cambio". Agregar la vista dividida a una salida en el delegado de la aplicación hizo que el botón apareciera en el inicio vertical para mí, pero cuando abro la ventana emergente está vacío. Probablemente esto pueda solucionarse de alguna manera, pero creo que es extraño que la vista dividida no notifique a su delegado acerca de la orientación actual cuando se establezca.
Estuve atrapado en esto por bastante tiempo. Finalmente lo puse a funcionar. El awakeFromNib no funcionó para mí. El didFinishLaunchingWithOptions lo hizo. Podría ser porque estoy ejecutando alguna consulta que llena los elementos en el controlador emergente.