I have a basic TVML application set up. Currently simple events (such as a button press) are handled via JavaScript (TVJS).
When the user presses a button (provided via TVML template) I'd like some code to run in Swift instead, that manipulates UI elements.
What's the best way to do this?
You can use evaluateAppJavaScriptIn method in TVApplicationControllerDelegate as below and write corresponding swift method in it; (swift side)
// 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)!)
}
After that you can call this method from TVJS like this; (js side)
debug('Hello from js to swift...');