是否可以在不依赖Apple标准模板的情况下使用TVML创建动态模板/页面?
假设我想创建一个模板,该模板具有 2 个彼此相邻的图像,并在这些图像的顶部有几个文本字段,我想根据一些参数定位这些文本字段。
我可以创建一个模板/视图 i UIKit 并从 JS 填充它作为替代方案吗?
我该怎么做?
我想你说的是"divTemplate"的混合,它的存在正是为了让你使用你想要的任何布局,没有预定义的结构或位置,并使用本机代码来定义你自己的自定义TVML元素。
从Apple的文档中,"包含的元素没有内置布局。使用 TVML 样式中列出的样式属性来个性化放置在div 模板内的元素。 它适用于完全自由形式的手工元素布局。
至于另一条路径:将UIKit视图添加到TVML的方法是定义自定义元素。 这就是TVML系统知道您的自定义视图应该在TVML"页面"中的位置的方式。 如果你沿着这条路走下去,你会想要阅读TVMLKit,而不仅仅是TVML和TVJS。 你创建一个符合TVInterfaceCreating
协议的类,可能创建一个TVViewElement
的子类(如果现有类之一不足以满足您的需求),向[TVElementFactory registerViewElementClass: [MyTVViewElement class] forElementName:@"mycustomelement" ]
注册元素,并向[[TVInterfaceFactory sharedInterfaceFactory] setExtendedInterfaceCreator: myInterfaceCreator]
注册TVInterfaceCreating
类。
因此,在我看来,您可以使用divTemplate和大量精心制作的样式信息来完全完成此操作,而无需任何自定义代码或UIView对象,或者您可以为正在谈论的部分制作一个或少量自定义元素。 我不知道你是否可以制作一个新的"模板",它本身就是一个自定义元素,但是 - 这是我还没有尝试过的东西。
如果你决定沿着原生代码路径走下去,并且你发现与TVViewElement相关的API不够丰富,无法在JavaScript和自定义视图之间进行协调,你可能还需要阅读JavaScriptCore API。 这些允许你通过JavaScript,通过JSContext上的API公开任意的本机支持的功能。 在 TVML 应用程序中,通过实现TVApplicationControllerDelegate
协议中的 - appController:(TVAppController *) evaluateAppJavaScriptInContext:(JSContext *)
方法,可以连接到所有这些。