【发布时间】:2015-10-20 19:53:08
【问题描述】:
我正在尝试构建一个包含原生内容和 TVML 内容的 tvOS 应用。理想情况下,我想在容器视图中呈现 TVML 内容;如果做不到这一点,如果我能在 TVML 内容上模态地呈现一个原生 UIViewController,我会很高兴。到目前为止,我在这两种方法中都失败了。
到目前为止,我最接近的是模态呈现,但我的问题是模态视图控制器总是显得模糊,在 TVML 内容的后面。代码如下(它基于 Ray Wenderlich 网站的 sn-p):-
// URL and context
NSString *baseURL = @"http://localhost:9001/";
NSString *bootURL = [NSString stringWithFormat:@"%@js/application.js", baseURL];
TVApplicationControllerContext *context = [[TVApplicationControllerContext alloc] init];
context.javaScriptApplicationURL = [NSURL URLWithString:bootURL];
context.launchOptions = @{@"BASEURL": baseURL};
// only seems to work with a full-screen window
UIWindow *window = [[UIWindow alloc] initWithFrame:[UIScreen mainScreen].bounds];
// instantiate TVApplicationController
self.tvAppController = [[TVApplicationController alloc] initWithContext:context window:window delegate:self];
// get a simple test view controller from storyboard and present modally
UIViewController *controller = [self.storyboard instantiateViewControllerWithIdentifier:@"testVC"];
[self.tvAppController.navigationController pushViewController:controller animated:YES];
这里有几件事我不明白。
首先,我需要分配一个全新的全尺寸窗口才能正常工作。尝试使用现有的self.view.window 或尝试使用较小的窗口均失败,即不显示 TVML。所以我假设新窗口正在以相当高的级别添加到视图层次结构中并排在其他所有内容之前?这似乎很有限 - 我错过了什么吗?
其次,Apple 的文档建议可以省略该窗口,以便更好地控制 TVML 视图的显示方式:-
如果没有提供窗口,则可以呈现导航控制器 并在二进制应用程序中手动关闭。
但是,我无法从那句话中得到什么实际意义。如果我将窗口参数设置为nil,TVML 内容根本不会出现。他们希望我如何“呈现”只读导航控制器? (我尝试将其嵌入到容器视图中,但出现异常。)
我已经尝试了几乎所有我能想到的。有没有人设法让混合的 TVML 和 tvOS 原生视图同时工作?
【问题讨论】:
标签: view window tvos tvapplicationcontroller