2016-04-25 2 views
1

私はTVOSの初心者です。AppleTV - tvos - ネイティブとTVMLKITを使用したハイブリッドアプリ - ネイティブアプリに戻れません

ネイティブアプリとTVMLKITを使用してAppleTVでハイブリッドアプリを作成したいと思います。 私のネイティブアプリケーションはボタン付きの単純なネイティブアプリです(swiftを使用しています)。

ボタンをクリックすると、TVLMKITとTVJSを使ってjavascriptアプリを起動します。

私のTVJS asは、Playerを使用してビデオを表示します。 ビデオが終了したら、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ビューをクリアします。

ネイティブアプリが表示されますが、対話できません。

アイデア?おかげさまで

答えて

0

私も同じ問題がありました。私はUIViewControllerからTVMLドキュメントを開いた。私はまた、焦点を失った。ですからまず、ViewControllerでpreferredFocusedViewというvarをオーバーライドするようアドバイスします。このメソッドでは、viewAdへの参照を返すことができます。しかし、より良い解決策は、あなたのViewControllerをTVML項目に(TVMLKitフレームワークで)ラップすることです。その場合は、アプリケーション全体でTVMLを使用するため、問題がないことを望みます。

関連する問題