5

UIViewController から AppDelegate の UIWindow に UILabel を追加しようとしています。これは私がこれをやっている方法です:

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

    abcd.text=@"loading...";

    abcd.backgroundColor=[UIColor clearColor];

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

    [super viewDidLoad];


}  

しかし、私が見ているのは灰色の画面だけで、ラベルはありません。どこが間違っているのでしょうか?

4

5 に答える 5

3

UILabel を UIWindow に追加してはならず、UIViewController に追加する必要があります。この行を変更します。

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

このため:

[self.view addSubview:abcd];
于 2012-08-29T11:21:28.683 に答える
2

順序を逆にします

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

それで

次のコードを使用して、ウィンドウではなくビューに最初に追加してみてください

[self.view addSubview:abcd];

これでラベルが表示されない場合は、View Controller が読み込まれていません。

その場合は、xib ファイルのプロパティを確認してください。

ウィンドウの割り当て行を削除し、フックアップが正しくない場合、mainwindow.xib ファイルでウィンドウのフックアップを確認すると、ビューが読み込まれません。

于 2012-08-29T12:58:05.440 に答える
1

1) 最後の 2 つのデリゲート ステートメントの順序を逆にすることをお勧めします。

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

2)ウィンドウにラベルを追加できるはずですが、そうするのはやや非正統的です。いずれにせよ、viewController のビューにラベルを追加してみて、それが機能するかどうかを確認してください。そうであれば、(何らかの理由で) 本当にウィンドウに追加したい場合は、ここにコメントを追加してください。

[self.view addSubview:abcd];

それでもラベルが表示されない場合は、View Controller に問題がある可能性があります。nib で何か定義しましたか? 起動時に表示される要素はありますか? そうでない場合は、ビューが実際にロードされていることを確認できるように、何かを追加してください。[ビューの背景色を赤または青に設定して、実際にビューが読み込まれたことを確認できるようにする方法があります。]

于 2012-08-29T11:27:18.587 に答える
0

UIWindowにUILabelを追加した後にこれを試してください

  [[[[UIApplication sharedApplication] delegate] window] makeKeyAndVisible];
于 2012-08-29T11:24:53.143 に答える
0

おそらく、View Controller のビューが、追加したビューをカバーしている可能性があります。代わりに、View Controller のビューに新しいビューを追加します。

[self.view addSubview:abcd];
于 2012-08-29T11:21:01.263 に答える