2010-08-14 12 views
6

Tengo problemas para que UISplitViewController funcione en una aplicación universal donde ya he codificado la parte de iPhone. Como método de solución de problemas, decidí comenzar con un nuevo proyecto y simplemente intentar hacer la única acción que está causando un problema y todavía lo es.No se puede usar UISplitViewController en una aplicación universal?

Si creo una aplicación universal y en el controlador del iPad crea una vista dividida (ya sea en un XIB o en el código), entonces aparece como negro (a menos que establezca un color de fondo). Si lo hago en una aplicación exclusiva para iPad, se muestra muy bien.

Agradecería que alguien pudiera probar esto por su cuenta y ver si obtienen lo mismo, o decirme dónde me estoy equivocando.

  1. En Xcode, cree una aplicación universal "basada en la ventana".
  2. Vaya al controlador del iPad y pegue el código en la parte inferior.

Lo que obtengo es una pantalla negra, no una vista dividida. El mismo código funciona en un proyecto solo para iPad. ¿Qué estoy haciendo mal o qué está mal configurado?

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {  
    UISplitViewController *split = [[UISplitViewController alloc] initWithNibName:nil bundle:nil]; 

    UIViewController *vc1 = [[UIViewController alloc] initWithNibName:nil bundle:nil]; 
    vc1.view.backgroundColor = [UIColor redColor]; 

    UIViewController *vc2 = [[UIViewController alloc] initWithNibName:nil bundle:nil]; 
    vc2.view.backgroundColor = [UIColor blueColor]; 

    split.viewControllers = [NSArray arrayWithObjects:vc1, vc2, nil]; 

    [window addSubview:split.view]; 
    [window makeKeyAndVisible]; 

    [vc1 release]; 
    [vc2 release]; 
    [split release]; 

    return YES; 
} 

Respuesta

3

En primer lugar, no se debe liberar su vista dividida en didFinishLaunchingWithOptions. Agréguelo a su interfaz (en UIWindow) y solo libérelo en dealloc. En segundo lugar, subclase UISplitViewController de la siguiente manera:

@interface MySplitViewController : UISplitViewController 
{ 
} 
@end 
@implementation MySplitViewController 
- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation 
{ 
    return YES; 
} 
@end 

En tercer lugar, sus didFinishLaunchingWithOptions debería tener este aspecto:

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {  

    split = [[MySplitViewController alloc] init]; 

    UIViewController *vc1 = [[UIViewController alloc] init]; 
    vc1.view.backgroundColor = [UIColor redColor]; 

    UIViewController *vc2 = [[UIViewController alloc] init]; 
    vc2.view.backgroundColor = [UIColor blueColor]; 

    split.viewControllers = [NSArray arrayWithObjects:vc1, vc2, nil]; 

    [window addSubview:split.view]; 
    [window makeKeyAndVisible]; 

    [vc1 release]; 
    [vc2 release]; 

    return YES; 
} 
+0

Tienes razón con la gestión de la memoria y el Ivar adicional. La opción shouldRotateToInterfaceOrientation: anulación también suena genial, pero no funciona para mí. ¿Has probado? – tonklon

+0

Si la subclase de UISplitViewController no funciona para usted, intente subclasificar cada UIViewController y anular shouldRotateToInterfaceOrientation: en cada uno. Esta es probablemente la mejor manera de hacerlo de todos modos ... – ian

+0

Fue el autorroteo de los subcontroladores de vista dividida y el problema de lanzamiento combinado. – codepoet

Cuestiones relacionadas