2

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

假设我想创建一个模板,该模板有 2 个相邻的图像,并且在这些图像之上有几个我想根据一些参数定位的文本字段。

我可以创建一个模板/视图 i UIKit 并从 JS 填充它作为替代方案吗?

我该怎么办?

4

1 回答 1

6

我认为您正在谈论“divTemplate”的混合,它的存在正是为了让您使用您想要的任何布局,没有预定义的结构或位置,并使用本机代码来定义您自己的自定义 TVML 元素。

从 Apple 的文档中,“包含的元素没有内置布局。使用 TVML 样式中列出的样式属性来个性化放置在 div 模板内的元素。” 它适用于完全自由形式的手动元素布局。

至于另一条路径:将 UIKit 视图添加到 TVML 的方法是定义自定义元素。这就是 TVML 系统如何知道您的自定义视图应该在 TVML“页面”中的位置。如果你走这条路,你会想要阅读 TVMLKit,而不仅仅是 TVML 和 TVJS。您创建一个符合TVInterfaceCreating协议的类,可能创建一个子类TVViewElement(如果现有类之一不足以满足您的需要),使用 注册元素[TVElementFactory registerViewElementClass: [MyTVViewElement class] forElementName:@"mycustomelement" ],并使用 注册您的TVInterfaceCreating[[TVInterfaceFactory sharedInterfaceFactory] setExtendedInterfaceCreator: myInterfaceCreator]

所以在我看来,你可以使用一个 divTemplate 和大量精心设计的样式信息来完全不需要任何自定义代码或 UIView 对象,或者你可以为你的部分制作一个或少量的自定义元素谈论。我不知道你是否可以制作一个新的“模板”,它本身就是一个自定义元素,但是 - 这是我还没有尝试过的东西。

如果您决定采用原生代码路径,并且发现与 TVViewElement 相关的 API 不够丰富,无法在 JavaScript 和自定义视图之间进行协调,那么您可能还需要阅读 JavaScriptCore API。这些允许您通过 JavaScript 或 JSContext 上的 API 公开任意原生支持的功能。在 TVML 应用程序中,挂钩所有这些的一个好地方是通过实现协议中的- appController:(TVAppController *) evaluateAppJavaScriptInContext:(JSContext *)方法TVApplicationControllerDelegate

于 2016-01-26T16:06:09.697 回答