是否可以在不依赖Apple标准模板的情况下使用TVML创建动态模板/页面?
假设我想创建一个模板,该模板具有两个彼此相邻的图像,并且在这些图像的顶部,我要基于一些参数定位几个文本字段。
我可以在UIKit中创建模板/ View 并从JS中填充它吗?
我将如何处理?
最佳答案
我认为您是在谈论“divTemplate”的混合,它的存在恰好是为了让您使用所需的任何布局而无需预定义结构或放置,并使用本机代码定义自己的自定义TVML元素。
根据Apple的文档,“所包含的元素没有内置布局。使用TVML样式中列出的样式属性来个性化放置在div模板内部的元素。”它用于完全自由形式的手工元素布局。
至于另一条路径:将UIKit View 添加到TVML的方法是定义一个自定义元素。这就是TVML系统知道自定义 View 应该在TVML“页面”中的位置的方式。如果您走这条路,那么您将需要阅读TVMLKit,而不仅仅是TVML和TVJS。您将创建一个符合TVInterfaceCreating
协议(protocol)的类,并可能创建TVViewElement
的子类(如果现有类之一不足以满足您的需要),则将元素注册到[TVElementFactory registerViewElementClass: [MyTVViewElement class] forElementName:@"mycustomelement" ]
,然后将您的TVInterfaceCreating
类注册到[[TVInterfaceFactory sharedInterfaceFactory] setExtendedInterfaceCreator: myInterfaceCreator]
。
因此,按照我的看法,您可以使用divTemplate和大量精心制作的样式信息来完全完成此操作,而无需任何自定义代码或UIView对象,或者您可以为要制造的零件制作一个或少量自定义元素在谈论。我不知道您是否可以制作一个新的"template",它本身就是一个自定义元素,但是-我还没有尝试过。
如果您决定采用本机代码路径,并且发现与TVViewElement相关的API不够丰富,无法在JavaScript和自定义 View 之间进行协调,那么您可能还需要阅读JavaScriptCore API。这些使您可以通过JSContext上的API通过JavaScript公开任意的本机支持的功能。在TVML应用程序中,了解这一切的好地方是通过实现- appController:(TVAppController *) evaluateAppJavaScriptInContext:(JSContext *)
协议(protocol)中的TVApplicationControllerDelegate
方法。
关于javascript - TVML创建动态模板,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/35012450/