AppDelegate UIWindow在不同的viewController中的addSubView

我想从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]; } 

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

1)我build议你颠倒你最后两个委托语句的顺序:

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

2)虽然你应该能够将标签添加到窗口,但是这样做有点不正统。 在任何情况下,尝试添加标签到viewController的视图,看看是否工作,如果是这样,你真的想把它添加到窗口(出于某种原因),然后在这里添加一个评论:

 [self.view addSubview:abcd]; 

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

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

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

为了这:

 [self.view addSubview:abcd]; 

反转命令

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

然后

尝试添加到视图首先不使用下面的代码窗口

 [self.view addSubview:abcd]; 

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

如果是这样,那么检查你的xib文件的属性。

删除窗口的分配线,并检查钩在你的窗口在mainwindow.xib文件,如果hoockup不正确的话,它不会加载视图。

也许你的视图控制器的视图覆盖了你添加的视图。 相反,将新视图添加到视图控制器的视图中:

 [self.view addSubview:abcd]; 

在UIWindow中添加UILabel后试试这个

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