如何将此UILabel代码放在AppDelegate之外?

时间:2012-07-17 08:02:51

标签: ios

我已经开始了一个新的iOS“Empty Application” - 模板项目。当我将此代码放在application:didFinishLaunchingWithOptions:方法中时,它可以正常工作:

 CGRect frame = CGRectMake(10, 10, 300, 25);
 UILabel *helloLabel = [UILabel new];
 [helloLabel setFrame:frame];
 helloLabel.text = @"Hello iPhone!";  
 [self.window addSubview:helloLabel];

但我真正想做的是在另一个类中创建一个“addHello”类方法,以便application:didFinishLaunchingWithOptions:中显示的内容只是:

[MyOtherClass addHello];

这是我尝试过的其他课程:

+ (void) addHello { 

CGRect frame = CGRectMake(10, 10, 300, 25);
UILabel *helloLabel = [UILabel new];
[helloLabel setFrame:frame];
helloLabel.text = @"Hello iPhone!";

UIWindow *window = [[UIApplication sharedApplication] keyWindow];
[window addSubview:helloLabel];

}

但这不起作用。我该怎么办?

1 个答案:

答案 0 :(得分:1)

我的猜测是[[UIApplication sharedApplication] keyWindow]在你的代码中返回nil,因为你在UIWindow的makeKeyAndVisible方法调用了 not 之前调用了你的addHello方法。我想知道这是否有效:

在你的appDidFinishLaunching方法中:

[MyOtherClass addHelloWithWindow:self.window];

然后是你的MyOtherClass

+ (void) addHelloWithWindow:(UIWindow *)window
{ 
    CGRect frame = CGRectMake(10, 10, 300, 25);
    UILabel *helloLabel = [UILabel new];
    [helloLabel setFrame:frame];
    helloLabel.text = @"Hello iPhone!";
    [window addSubview:helloLabel];
}