我设置了一个基本的 TVML 应用程序。目前简单的事件(例如按钮按下)是通过 JavaScript (TVJS) 处理的。
当用户按下一个按钮(通过 TVML 模板提供)时,我希望一些代码在 Swift 中运行,而不是操作 UI 元素。
最好的方法是什么?
我设置了一个基本的 TVML 应用程序。目前简单的事件(例如按钮按下)是通过 JavaScript (TVJS) 处理的。
当用户按下一个按钮(通过 TVML 模板提供)时,我希望一些代码在 Swift 中运行,而不是操作 UI 元素。
最好的方法是什么?
您可以使用如下 TVApplicationControllerDelegate 中的 evaluateAppJavaScriptIn 方法并在其中编写相应的 swift 方法;(迅速的一面)
// MARK: TVApplicationControllerDelegate
func appController(_ appController: TVApplicationController, evaluateAppJavaScriptIn jsContext: JSContext){
let debug : @convention(block) (String!) -> Void = {
(string : String!) -> Void in
#if DEBUG
print("[log]: \(string!)\n")
#endif
}
jsContext.setObject(unsafeBitCast(debug, to: AnyObject.self), forKeyedSubscript: "debug" as (NSCopying & NSObjectProtocol)!)
}
之后,您可以像这样从 TVJS 调用此方法;(js侧)
debug('Hello from js to swift...');