我正在寻找解决我问题的方法很长时间,但在我的案例中大多数都没用,因为几乎所有这些都是关于在IB中完成的错误,我在这个项目中没有使用。要点:
我有一个用Unity生成的XCode项目,我想在UnityViewController的顶部添加另一个带有UIWebView的视图控制器。由于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是否为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的子视图。
P.S。我还尝试使用webvController设置为rootvc来呈现UINavigation控制器,但我得到的只是一个带导航栏的黑屏。
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的行。它没有被调用。
EDIT2: 通过断点,我发现没有调用我的WebViewController子类的方法,甚至不是init。这就像xcode忽略了那个类的存在。我只编辑了viewDidLoad方法,其余的是默认的UIViewController子类模板。 WebViewController.h也没有变化。
EDIT3: 现在修好了。将WebViewController类名更改为其他类名称有所帮助。我能想到的唯一合乎逻辑的解释是WebViewController之前已经在其中一个源文件中实现过,但我自己并没有这样做。可能在其中一个库中(?)。 无论如何,感谢您的帮助,我接受了GuillaumeA的答案,因为感谢他的建议,我发现它实际上并不是观点的问题。
答案 0 :(得分:8)
使用您提供的信息很难知道问题的来源。
这可能只是一种正常行为。在创建UIViewController
的新实例时(我假设您的WebViewController
是子类),它会为它创建一个空白根UIView
。
“空白”是指视图没有子视图,但也没有背景颜色(nil
)。这会使视图显示为黑色,并且 - 由于某种原因 - 会阻止视图在显示时生成动画。
要测试我的假设是否正确,请尝试更改WebViewController
视图的背景颜色:
WebViewController *webViewController = [[WebViewController alloc] init];
webViewController.view.backgroundColor = [UIColor redColor];
[[[[UIApplication sharedApplication] keyWindow] rootViewController] presentModalViewController:webViewController animated:YES];
注意:{6.0}中现已弃用presentModalViewController:animated:
,因此您可能希望将其替换为presentViewController:animated:completion:
:
[[[[UIApplication sharedApplication] keyWindow] rootViewController] presentViewController:webViewController animated:YES completion:nil];
答案 1 :(得分:0)
尝试像这样初始化
WebViewController *webViewController=[[WebViewController alloc]initWithNibName:@"WebViewController" bundle:[NSBundle mainBundle]];
注意:假设您的nib文件名称为:WebViewController.xib