0

我编译了这段代码没有错误,但我无法显示welcomeUIView

是的,当我将它移入didFinishLaunchingWithOptions时,它会显示出来。但是为什么我不能按照我想要的方式去做呢?

这是控制台:

didFinishLaunchingWithOptions
view()
finished

编码:

AppDelegate.h

#import <UIKit/UIKit.h>
static UIWindow *window;

@interface AppDelegate : UIResponder <UIApplicationDelegate>
@end 

AppDelegate.mm

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
std::cout<<"didFinishLaunchingWithOptions"<<std::endl;
window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]];
window.rootViewController = [[UIViewController alloc] init];

view *v = new view();
v->set();

// Override point for customization after application launch.
window.backgroundColor = [UIColor whiteColor];
[window makeKeyAndVisible];

std::cout<<"finished"<<std::endl;

return YES;
}

视图.mm

#include "view.h"
#include "AppDelegate.h"
#include <UIKit/UIKit.h>
#include <iostream>

void view::set()
{
std::cout<<"view()"<<std::endl;

UIView *welcomeUIView = [[UIView alloc] initWithFrame:[[UIScreen mainScreen] bounds]];
[welcomeUIView setBackgroundColor:[UIColor darkGrayColor]];

[welcomeUIView setHidden:false];
[window.rootViewController.view addSubview:welcomeUIView];
[window.rootViewController.view bringSubviewToFront:welcomeUIView];
}
4

2 回答 2

0

您可以轻松地在根视图控制器中添加视图。在里面做viewDidLoad

-(void)viewDidLoad {
    [super viewDidLoad]; 

    UIView *welcomeView = 
          [[UIView alloc] initWithFrame:self.view.bounds];
    welcomeView.backgroundColor = UIColor.darkGrayColor;
    [self.view addSubview:welcomeView];
}

但是,如果您有状态栏或导航栏,这将不会覆盖整个屏幕。相反,您可以将视图添加到self.view.window(使用代码中的 CGRect)。

于 2013-07-15T19:04:42.833 回答
0

该错误是在您的标题window中声明static的,因此每个翻译单元都有自己独特的window.

您已经window在 AppDelegate.mm 中设置了变量,但是在 view.mm 中您有一个不同的变量,window它仍然为零。如果你想分享window你应该extern在你的标题中声明它,然后在 AppDelegate.mm 中定义它。

此外,您应该让您的视图控制器通过继承 UIViewController 和覆盖来设置自己的视图层次结构loadView

于 2013-07-15T19:32:27.803 回答