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

视图控制器代码

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

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

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

如果连接不正确,则删除窗口分配行并检查 mainwindow.xib 文件中窗口的连接,然后它将不会加载视图。

于 2012-08-29T12:58:05.440 回答
1

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

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

2)虽然您应该能够将标签添加到窗口,但这样做有点不正统。在任何情况下,尝试将标签添加到 viewController 的视图中,看看是否有效,如果有效,并且您确实想将其添加到窗口(出于某种原因),然后在此处添加注释:

[self.view addSubview:abcd];

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

于 2012-08-29T11:27:18.587 回答
0

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

[self.view addSubview:abcd];
于 2012-08-29T11:21:01.263 回答
0

在 UIWindow 中添加 UILabel 后试试这个

  [[[[UIApplication sharedApplication] delegate] window] makeKeyAndVisible];
于 2012-08-29T11:24:53.143 回答