AppDelegate UIWindow addSubView在不同的viewController中

时间:2012-08-29 11:15:53

标签: iphone ios uiwindow

我正在尝试从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];


}  

但我所看到的只是灰色屏幕,但没有标签。哪里可能会出错?

5 个答案:

答案 0 :(得分:3)

您不能将UILabel添加到UIWindow,您应该添加到UIViewController。改变这一行:

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

为此:

[self.view addSubview:abcd];

答案 1 :(得分:2)

将订单撤消到

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

然后

尝试使用以下代码

首先添加到视图而不是窗口
[self.view addSubview:abcd];

如果这不显示您的标签,则视图控制器未加载。

如果是,请检查xib文件的属性。

删除窗口alloc行并检查mainwindow.xib文件中窗口的挂钩如果hoockup不正确那么它将不会加载视图。

答案 2 :(得分:1)

1)我建议你颠倒你最后两个委托陈述的顺序:

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

2)虽然你应该能够将标签添加到窗口,但它有点不正统。在任何情况下,尝试将标签添加到viewController的视图,看看是否有效,如果是,你真的想将它添加到窗口(由于某种原因),然后在这里添加注释:

[self.view addSubview:abcd];

如果您仍然看不到标签,则视图控制器可能存在问题。你有没有在笔尖中定义任何东西 - 在发布时应该可见的任何元素?如果没有,那么添加一些东西,以确保视图实际上已加载。 [我使用的一个技巧是将视图的背景颜色设置为红色或蓝色,所以我可以看到它实际上已经加载了。]

答案 3 :(得分:0)

也许您的视图控制器的视图覆盖了您添加的视图。将新视图添加到视图控制器的视图中:

[self.view addSubview:abcd];

答案 4 :(得分:0)

在UIWindow

中添加UILabel后尝试此操作
  [[[[UIApplication sharedApplication] delegate] window] makeKeyAndVisible];