我正在尝试从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];
}
但我所看到的只是灰色屏幕,但没有标签。哪里可能会出错?
答案 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];