2012-08-29 15 views
5

Estoy intentando agregar un UILabel en UIWindow de AppDelegate desde un UIViewController. Así es como yo estoy haciendo esto:AppDelegate UIWindow addSubView en viewController

código AppDelegate:

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions 
{ 
    self.window = [[[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]] autorelease]; 
    // Override point for customization after application launch. 
    if ([[UIDevice currentDevice] userInterfaceIdiom] == UIUserInterfaceIdiomPhone) { 
     self.viewController = [[[ViewController alloc] initWithNibName:@"ViewController_iPhone" bundle:nil] autorelease]; 
    } else { 
     self.viewController = [[[ViewController alloc] initWithNibName:@"ViewController_iPad" bundle:nil] autorelease]; 
    } 



    [self.window makeKeyAndVisible]; 

    self.window.rootViewController = self.viewController; 


    return YES; 
} 

código ViewController:

- (void)viewDidLoad 
{ 

    UILabel *abcd=[[UILabel alloc] initWithFrame:CGRectMake(100.0, 100.0, 200.0, 40.0)]; 

    [email protected]"loading..."; 

    abcd.backgroundColor=[UIColor clearColor]; 

    [[[[UIApplication sharedApplication] delegate] window] addSubview:abcd]; 

    [super viewDidLoad]; 


} 

Pero todo lo que estoy viendo es la pantalla gris, pero sin etiqueta. Donde podría estar yendo mal?

+0

Solo un pequeño consejo, no es necesario comprobar si la aplicación se ejecuta en un iPad para cargar una vista específica de iPad o iPhone. Simplemente agregue el '~ ipad' al nombre de la vista.Por lo tanto, el nombre del archivo de la vista de iphone será: 'ViewController.xib' y la versión del iPad será:' ViewController ~ ipad.xib'. Ahora puede cargar la vista con: '[[ViewController alloc] initWithNibName: @" ViewController "bundle: nil]' e iOS cargará el correcto. – rckoenes

+0

Oh ... Gracias por el consejo. :) Ahora la respuesta por favor. :) – Nitish

Respuesta

1

1) Le sugiero que invertir el orden de sus dos últimas declaraciones de los delegados:

self.window.rootViewController = self.viewController; 
[self.window makeKeyAndVisible]; 

2) Si bien deberías poder agregar la etiqueta a la ventana, es algo poco ortodoxo hacerlo. En cualquier caso, trate de añadir la etiqueta a la opinión del viewController y ver si funciona, y si es así, y que realmente desea agregarlo a la ventana (por alguna razón), a continuación, añadir un comentario aquí:

[self.view addSubview:abcd]; 

Si aún no puede ver la etiqueta, es probable que haya un problema con el controlador de vista. ¿Definió algo en la punta, cualquier elemento que debería estar visible en el lanzamiento? De lo contrario, agregue algo solo para asegurarse de que la vista se cargue. [Un truco que utilizo es para establecer el color de fondo de puntos de vista a rojo o azul, por lo que se puede ver que, de hecho, consiguieron cargados.]

0

Tal vez la vista de su controlador de vista está cubriendo la que ha agregado. Añadir la nueva vista a la vista del controlador de vista en su lugar:

[self.view addSubview:abcd]; 
3

No debe agregar a UILabel UIWindow, se debe añadir a UIViewController. Cambie esta línea:

[[[[UIApplication sharedApplication] delegate] window] addSubview:abcd]; 

para esto:

[self.view addSubview:abcd]; 
+0

thx @alfonsomiranda – user1872384

0

Prueba esto después de añadir UILabel en UIWindow

[[[[UIApplication sharedApplication] delegate] window] makeKeyAndVisible]; 
2

revers el fin de

self.window.rootViewController = self.viewController; 
[self.window makeKeyAndVisible]; 

Entonces

trate de añadir a la vista primero no a la ventana siguiente código utilizando

[self.view addSubview:abcd]; 

Si esto no muestra la etiqueta entonces el controlador de vista no está siendo cargado.

Si es así, verifique la propiedad de su archivo xib.

elimine la línea de alloc de ventana y verifique la conexión de su ventana en el archivo mainwindow.xib si el hoockup no es correcto, entonces no cargará la vista.

+0

Gracias. El controlador de vista no se está cargando, por lo que no se muestra. Agregar código en ** viewDidAppear **. Audaz la línea. –

Cuestiones relacionadas