Swift AppleTV-tvos-使用本机和TVMLKIT的混合应用程序-Can';t返回到本机应用程序

Swift AppleTV-tvos-使用本机和TVMLKIT的混合应用程序-Can';t返回到本机应用程序,swift,apple-tv,tvml,tvjs,tvos9.1,Swift,Apple Tv,Tvml,Tvjs,Tvos9.1,我是电视操作系统的初学者 我想在AppleTV上创建一个混合应用程序,使用本机应用程序和TVMLKIT。 我的本机应用程序只是一个带有按钮的简单本机应用程序(使用swift) 当我们点击一个按钮时,我使用TVLMKIT和TVJS启动了一个javascript应用程序 我的TVJS as使用播放器显示视频。 视频结束后,我想关闭TVJS应用程序并返回到本机ViewController 我的问题是,当我回到本机应用程序时,我失去了对本机视图的关注(应用程序被冻结) 本机ViewController:

我是电视操作系统的初学者

我想在AppleTV上创建一个混合应用程序,使用本机应用程序和TVMLKIT。 我的本机应用程序只是一个带有按钮的简单本机应用程序(使用swift)

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

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

我的问题是,当我回到本机应用程序时,我失去了对本机视图的关注(应用程序被冻结)

本机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视图

我可以看到我的本机应用程序,但无法与之交互

有什么想法吗?
谢谢。

我也有同样的问题。我从UIViewController打开了一个TVML文档。我也失去了注意力。首先,我建议您在ViewController中重写名为preferredFocusedView的变量。在此方法中,可以返回对viewAd的引用。但是更好的解决方案是将ViewController包装到TVML项中(使用TVMLKit框架)。在这种情况下,我希望您在使用focus时不会遇到任何问题,因为您将在整个应用程序中使用TVML。

我也遇到了同样的问题。我从UIViewController打开了一个TVML文档。我也失去了注意力。首先,我建议您在ViewController中重写名为preferredFocusedView的变量。在此方法中,可以返回对viewAd的引用。但是更好的解决方案是将ViewController包装到TVML项中(使用TVMLKit框架)。在这种情况下,我希望您在focus方面没有问题,因为您将在整个应用程序中使用TVML