TVML创建动态模板

时间:2016-01-26 11:09:29

标签: javascript tvos apple-tv tvml tvjs

是否可以使用TVML创建动态模板/页面而无需依赖Apple的标准模板?

说我想创建一个模板,其中有两个图像彼此相邻,并且在这些图像的顶部有几个我希望根据某些参数定位的文本字段。

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

我该怎么做?

1 个答案:

答案 0 :(得分:6)

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

来自Apple的文档,"所包含的元素没有内置布局。使用TVML样式中列出的样式属性来个性化div模板中放置的元素。" 完全自由格式的手形元素布局。

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

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

如果您决定沿着原生代码路径走下去,并且发现与TVViewElement相关的API不够丰富,无法在JavaScript和自定义视图之间进行协调,那么您可能还需要阅读JavaScriptCore API。这些允许您通过JavaScript通过JSContext上的API公开任意本机支持的功能。在TVML应用程序中,通过实施[[TVInterfaceFactory sharedInterfaceFactory] setExtendedInterfaceCreator: myInterfaceCreator]协议中的- appController:(TVAppController *) evaluateAppJavaScriptInContext:(JSContext *)方法,可以了解所有这些内容。