2012-08-29 12 views
5

Sto tentando di aggiungere una UILabel in UIWindow di AppDelegate da un UIViewController. Questo è il modo in cui sto facendo questo:AppDelegate UIWindow addSubView in diverse viewController

codice 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; 
} 

codice 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]; 


} 

Ma tutto quello che sto vedendo è schermata grigia, ma nessuna etichetta. Dove potrei sbagliare?

+0

Solo un piccolo suggerimento, non è necessario verificare se l'app è in esecuzione su un iPad per caricare una vista specifica dell'iPad o dell'iPhone. Basta aggiungere '~ ipad' al nome della vista.Quindi il nome del file di visualizzazione iphone sarà: 'ViewController.xib' e la versione per iPad sarà:' ViewController ~ ipad.xib'. Ora puoi caricare la vista con: '[[ViewController alloc] initWithNibName: @" ViewController "bundle: nil]' e iOS caricheranno quello corretto. – rckoenes

+0

Oh ... Grazie per il suggerimento. :) Ora la risposta per favore. :) – Nitish

risposta

1

1) vi consiglio di invertire l'ordine delle ultime due affermazioni delegato:

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

2) Mentre dovresti essere in grado di aggiungere l'etichetta alla finestra, è piuttosto poco ortodosso farlo. In ogni caso, prova ad aggiungere l'etichetta al punto di vista della viewController e vedere se funziona, e se è così, e si vuole veramente aggiungerlo alla finestra (per qualche motivo), quindi aggiungere un commento qui:

[self.view addSubview:abcd]; 

Se ancora non riesci a vedere l'etichetta è probabile che ci sia un problema con il controller della vista. Hai definito qualcosa nel pennino: qualsiasi elemento che dovrebbe essere visibile al momento del lancio? In caso contrario, aggiungi qualcosa solo per assicurarti che la vista venga effettivamente caricata. [Un trucco che uso è quello di impostare il colore di vista di colore rosso o blu, così posso vedere che in realtà hanno ottenuto caricati.]

0

Forse la visualizzazione del controller di visualizzazione copre quella che hai aggiunto. Aggiungere la nuova visualizzazione alla visualizzazione del controller della vista, invece:

[self.view addSubview:abcd]; 
3

Non si deve aggiungere UILabel a UIWindow, si dovrebbe aggiungere a UIViewController. Modificare questa linea:

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

per questo:

[self.view addSubview:abcd]; 
+0

thx @alfonsomiranda – user1872384

0

Prova questo dopo l'aggiunta di UILabel in UIWindow

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

revers l'ordine di

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

Poi

provare ad aggiungere alla vista prima non alla finestra utilizzando seguente codice

[self.view addSubview:abcd]; 

Se questo non mostra l'etichetta poi il controller della vista non è sempre caricato.

In questo caso, controllare la proprietà del file xib.

rimuovere la riga di allocazione della finestra e controllare il collegamento per la finestra nel file mainwindow.xib se il hoockup non è corretto, quindi non caricherà la vista.

+0

Grazie. Il controller della vista non viene caricato, quindi non viene visualizzato. Aggiungi codice in ** viewDidAppear **. In grassetto la linea. –

Problemi correlati