2012-08-29 14 views
5

UIViewControllerからAppDelegateのUIWindowにUILabelを追加しようとしています。AppDelegate別のviewControllerのUIWindow addSubView

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

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


} 

しかし、私は見ていますすべてが灰色の画面が、ラベルなしです。どこが間違っているかもしれない?

+0

ちょっとしたヒントは、特定のiPadまたはiPhoneビューを読み込むためにアプリがiPadで動作していることを確認する必要はありません。ビューの名前に '〜ipad'を追加するだけです。したがって、iphoneビューのファイル名は 'ViewController.xib'になり、iPadのバージョンは' ViewController〜ipad.xib'になります。これでビューをロードすることができます: '[[ViewController alloc] initWithNibName:@" ViewController "bundle:nil]'とiOSが正しいものをロードします。 – rckoenes

+0

ああ...チップをありがとう。 :)答えてください。 :) – Nitish

答えて

1

1)でUILabelを追加した後、これを試してみてください。このため

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

:この行を変更します。

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

2)ラベルをウィンドウに追加することはできますが、そうするにはやや正統性がありません。いずれにせよ、のViewControllerのビューにラベルを追加してみてください、それが動作するかどうかを確認し、もしそうなら、あなたは本当に(何らかの理由で)ウィンドウに追加したい、そして、ここにコメントを追加:

[self.view addSubview:abcd]; 

まだラベルが表示されない場合は、View Controllerに問題がある可能性があります。ペン先に何かを定義しましたか?打ち上げ時に見えるべき要素ですか?そうでなければ、何かを追加するだけで、ビューが実際にロードされていることを確認できます。 [私が使用して1つのトリックは、赤や青にビューの背景色を設定することですので、私は実際には、彼らがロードされてしまっていることがわかります。そして

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

0

あなたのビューコントローラーのビューは、追加したビューをカバーしている可能性があります。代わりに、ビューコントローラのビューに新しいビューを追加します。

[self.view addSubview:abcd]; 
3

あなたがのUIViewControllerに追加する必要があり、UIWindowにUILabelを追加してはいけません。私はあなたがあなたの最後の二つのデリゲート文の順序を逆に提案し

[self.view addSubview:abcd]; 
+0

thx @alfonsomiranda – user1872384

0

UIWindow

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

REVERS順

[self.view addSubview:abcd]; 

これにラベルが表示されない場合は、表示コントローラがロードされていないことを確認してください。

もしそうなら、xibファイルのプロパティをチェックしてください。

ホックアップが正しくなければ、ウィンドウの割り当て行を削除し、mainwindow.xibファイル内のウィンドウのフックアップをチェックしてください。ビューがロードされません。

+0

ありがとうございました。ビューコントローラがロードされていないので、表示されません。 ** viewDidAppear **にコードを追加してください。ラインを太字にします。 –

関連する問題