TVML 创建动态模板

TVML Creating Dynamic Templates

是否可以在不依赖 Apple 标准模板的情况下使用 TVML 创建动态 templates/pages?

假设我想创建一个模板,其中有 2 个图像并排放置,并且在这些图像之上有几个文本字段,我想根据一些参数定位它们。

我可以创建一个 template/view i UIKit 并从 JS 填充它作为替代吗?

我该怎么做?

我认为您是在谈论 "divTemplate" 的混合,它的存在正是为了让您可以使用任何您想要的布局,而无需预定义的结构或位置,并使用本机代码来定义您自己的自定义 TVML 元素.

来自 Apple 的文档,"There is no built-in layout for the contained elements. Use the style properties listed in TVML Styles to personalize the elements placed inside of the div template."完全是 for free-form by-hand 元素布局。

至于另一条路:将UIKit视图添加到TVML的方法是定义一个自定义元素。这就是 TVML 系统如何知道您的自定义视图应该在 TVML "page" 中的什么位置。如果你沿着这条路走下去,你会想要阅读 TVMLKit,而不仅仅是 TVML 和 TVJS。您制作了一个符合 TVInterfaceCreating 协议的 class,可能会创建一个 TVViewElement 的子 class(如果现有的 class 之一还不够根据您的需要),使用 [TVElementFactory registerViewElementClass: [MyTVViewElement class] forElementName:@"mycustomelement" ] 注册元素,并使用 [[TVInterfaceFactory sharedInterfaceFactory] setExtendedInterfaceCreator: myInterfaceCreator].

注册您的 TVInterfaceCreating class

所以在我看来,您可以使用一个 divTemplate 和大量精心制作的样式信息来完成它,而无需任何自定义代码或 UIView 对象,或者您可以为你说的那部分。我不知道您是否可以制作一个新的 "template",即 本身 一个自定义元素,但是 - 这是我还没有尝试过的东西。

如果您决定沿用本机代码路径,并且发现 TVViewElement-related API 不够丰富,无法在 JavaScript 和您的自定义视图之间进行协调,您也可以需要阅读 JavaScript 核心 API。这些允许您通过 JSContext 上的 API 通过 JavaScript 公开任意 native-backed 功能。在 TVML 应用程序中,实现所有这些的好地方是实现 TVApplicationControllerDelegate 协议中的 - appController:(TVAppController *) evaluateAppJavaScriptInContext:(JSContext *) 方法。