2013-06-05 160 views
2

我正在寻找相当长的我的问题的解决方案,但大多是在我的情况也没用,因为几乎所有的人都约在IB做了错误,这我不会在这个项目中使用。给点意见:presentViewController使得黑屏

我有团结产生XCode项目,我想有一个UIWebView它添加一个视图控制器上的UnityViewController的顶部。由于Unity生成的项目不使用UINavigationController,因此我无法使用pushViewController并决定使用presentViewController:...。问题是,当我尝试这样做时,我只看到一个黑屏。如果我打电话给dismissViewController,我再次看到UnityViewController,这样可以正常工作。问题是,它就像presentViewController不会添加我的vc视图。我使用断点来查看viewDidLoad是否被调用,而不是。 - (void)loadView和 - (UIView *)视图也一样。 下面是我用添加我的VC代码:

WebViewController *webViewController = [[WebViewController alloc] init]; 
[[[[UIApplication sharedApplication] keyWindow] rootViewController] presentModalViewController:webViewController animated:YES]; 

我检查,如果webViewController是零,它不是。该rootViewController是UnityViewController,我100%确定它。

这是创建视图层次结构的统一生成的代码:

_mainDisplay = [[DisplayManager Instance] mainDisplay]; 
[_mainDisplay->window makeKeyAndVisible]; 

static bool _ClassInited = false; 
if(!_ClassInited) 
{ 
    AddOrientationSupportDefaultImpl([UnityViewController class]); 
    _ClassInited = true; 
} 

_viewController = [[UnityViewController alloc] init]; 
_viewController.wantsFullScreenLayout = TRUE; 
_viewController.view = _mainDisplay->view; 

后来在另一种方法中:

[_mainDisplay->window addSubview: _mainDisplay->view]; 
_mainDisplay->window.rootViewController = _viewController; 
[_mainDisplay->window bringSubviewToFront: _mainDisplay->view]; 

能黑屏由缺乏的UINavigationController的引起的?

这可能是无关我的问题,但我也有我需要可见我的应用程序的所有时间的菜单和我做了它keyWindow的子视图。

P.S.我也尝试提供一个UITavigation控制器,并将webViewController设置为rootvc,但我得到的只是一个带有导航栏的黑屏。

P.S.S.我在Unity项目中使用Vuforia,因此我无法在模拟器中运行它。

编辑:

- (void)viewDidLoad 
{ 
    [super viewDidLoad]; 
    // Do any additional setup after loading the view. 
    self.view.backgroundColor = [UIColor whiteColor]; 

    UIImageView *icon = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"Icon.png"]]; 
    icon.frame = CGRectMake(50, 50, 200, 200); 
    [self.view addSubview:icon]; 
} 

断点上,我更改的backgroundColor行。它没有被调用。

编辑2: 随着断点,我发现没有我的WebViewController子类的方法被调用,甚至没有初始化。这就像xcode忽略了该类的存在。我只编辑了viewDidLoad方法,其余部分与默认的UIViewController子类模板一样。没有更改WebViewController.h。

EDIT3:现在 固定它。将WebViewController类名称更改为另一个帮助。我能想到的唯一合乎逻辑的解释是WebViewController之前已经在其中一个源文件中实现过,但我自己并没有这样做。可能在其中一个图书馆可能(?)。 无论如何,感谢您的帮助,我接受GuillaumeA的答案,因为他的建议,我发现它实际上并不是一个问题。

回答

8

很难知道你的问题来自使用你提供的信息。

这可能只是一个正常的行为。当创建UIViewController(我假设您的WebViewController是一个子类)的新实例时,它为它创建一个空白根UIView

'空白'我的意思是说没有子视图,但也没有背景色(nil)。这会使视图显示为黑色,并且 - 出于某种原因 - 在显示时阻止视图显示动画。

为了测试,如果我的假设是正确的,尝试改变WebViewController视图的背景色:

WebViewController *webViewController = [[WebViewController alloc] init]; 
webViewController.view.backgroundColor = [UIColor redColor]; 
[[[[UIApplication sharedApplication] keyWindow] rootViewController] presentModalViewController:webViewController animated:YES]; 

注:presentModalViewController:animated:现在已经过时,在IOS 6.0,所以你可能要与presentViewController:animated:completion:来替代它:

[[[[UIApplication sharedApplication] keyWindow] rootViewController] presentViewController:webViewController animated:YES completion:nil]; 
+0

我试了presentViewController和presentModalViewController,但结果是一样的。 但是,谢谢,改变presentViewController之前的工作背景,我看到一个红色的屏幕,而不是黑色。 – johnyu

+0

'presentModalViewController'和'presentViewController'做同样的事情是正常的行为,但前者已被弃用,所以你应该使用后者。是的红色屏幕:)!如果您觉得您的问题得到解决,您能接受我的答案吗? –

+0

它仍然没有解决我的问题,因为viewDidLoad仍然没有被调用。 – johnyu

0

尝试初始化这样

WebViewController *webViewController=[[WebViewController alloc]initWithNibName:@"WebViewController" bundle:[NSBundle mainBundle]]; 

注:假设你的笔尖文件是有名称:WebViewController.xib

+0

我没有在这个应用程序中使用Interface Builder,我没有任何.xib文件。我只用代码创建我的gui。 – johnyu