2016-04-25 81 views
1

我是TVOS的初学者。AppleTV - 电视 - 混合应用程序使用本机和TVMLKIT - 不能回到本地应用程序

我想在AppleTV上使用原生应用程序和TVMLKIT创建一个混合应用程序。 我的本地应用程序只是一个简单的本地应用程序与按钮(使用快速)。

当我们点击一​​个按钮时,我使用TVLMKIT和TVJS启动了一个JavaScript应用程序。

我的TVJS使用播放器来显示视频。 当视频结束时,我想关闭TVJS应用程序并返回到本机ViewController。

我的问题是,当我回到本地应用程序,我放松了我的本地查看(应用程序被冻结)的焦点。

本地视图控制器:

import UIKit 
import TVMLKit 

class ViewController: UIViewController, TVApplicationControllerDelegate { 

var window: UIWindow? 
var appController: TVApplicationController? 
var appControllerContext = TVApplicationControllerContext(); 
static let TVBaseURL = "http://localhost:9001/" 
static let TVBootURL = "\(ViewController.TVBaseURL)/client/js/application.js" 

override func viewDidLoad() { 
    super.viewDidLoad() 
    // Do any additional setup after loading the view, typically from a nib. 
} 

override func didReceiveMemoryWarning() { 
    super.didReceiveMemoryWarning() 
    // Dispose of any resources that can be recreated. 
} 

@IBOutlet weak var label: UILabel! 

@IBOutlet weak var viewAd: UIView! 

@IBAction func clickOnlaunchAd(sender: AnyObject) { 
    window = UIWindow(frame: UIScreen.mainScreen().bounds) 

    guard let javaScriptURL = NSURL(string: ViewController.TVBootURL) else { 
     fatalError("unable to create NSURL") 
    } 
    appControllerContext.javaScriptApplicationURL = javaScriptURL 
    appControllerContext.launchOptions["BASEURL"] = ViewController.TVBaseURL 

    appController = TVApplicationController(context: appControllerContext, window: window,delegate: self) 

} 
@IBAction func clickOnChangeText(sender: AnyObject) { 
    label.text = "changed"; 
} 

func appController(appController: TVApplicationController, didStopWithOptions options: [String : AnyObject]?) { 
    self.setNeedsFocusUpdate() 
    self.updateFocusIfNeeded() 
} 

func appController(appController: TVApplicationController, evaluateAppJavaScriptInContext jsContext: JSContext){ 
    let notifyEventToNative : @convention(block) (NSString!) -> Void = { 
     (string : NSString!) -> Void in 
      print("[log]: \(string)\n") 
      self.appController?.stop() 
    } 
    jsContext.setObject(unsafeBitCast(notifyEventToNative, AnyObject.self), forKeyedSubscript: "notifyEventToNative") 
} 
} 

只是从我的TVJS叫 “notifyEventToNative” 之前,我称之为 “navigationDocument.clear();”清除TVML视图。

我可以看到我的本机应用程序,但无法与其互动。

任何想法? 谢谢。

回答

0

我也有同样的问题。我从UIViewController打开了一个TVML文档。而且我也失去了重点。所以,首先我可以建议你在你的ViewController中重写var called preferredFocusedView。在此方法中,您可以返回对viewAd的引用。但更好的解决方案是将您的ViewController包装到TVML项目中(使用TVMLKit框架)。在这种情况下,我希望你不会因为焦点而出现问题,因为你会在整个应用程序中使用TVML。

相关问题