2

我一直在寻找我的问题的解决方案,但其中大多数在我的情况下都没用,因为几乎所有这些都是关于在 IB 中犯的错误,我在这个项目中没有使用。重点:

我有一个使用 Unity 生成的 XCode 项目,我想在 UnityViewController 之上添加另一个带有 UIWebView 的视图控制器。由于 Unity 生成的项目不使用 UINavigationController,因此我无法使用 pushViewController 并决定使用 presentViewController:... 代替。问题是,当我尝试这样做时,我只看到黑屏。如果我打电话给dismissViewController,我会再次看到UnityViewController,所以效果很好。问题是,就像 presentViewController 没有添加我的 vc 视图。我使用断点来查看是否正在调用 viewDidLoad 而不是。-(void)loadView 和 -(UIView *)view 也是如此。这是我用来添加我的 vc 的代码:

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

我检查了 webViewController 是否为 nil 而不是。rootViewController 就是 UnityViewController,我 100% 确定。

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

_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 的子视图。

PS我还尝试展示一个将webViewController设置为rootvc的UINavigation控制器,但我得到的只是一个带有导航栏的黑屏。

PSS 我在我的 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];
}

断点在我更改背景颜色的那一行。它没有被调用。

Edit2:通过断点,我发现没有调用我的 WebViewController 子类的方法,甚至没有调用 init。就像 xcode 忽略了该类的存在。我只编辑了 viewDidLoad 方法,其余的和默认的 UIViewController 子类模板一样。WebViewController.h 也没有变化。

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

4

2 回答 2

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];
于 2013-06-05T13:06:24.130 回答
0

尝试像这样初始化

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

注意:假设您的 nib 文件具有名称:WebViewController.xib

于 2013-06-05T12:49:00.790 回答