如何使用TVJS检测TVOS应用程序中的菜单按钮按下

时间:2015-12-16 22:27:02

标签: tvos apple-tv tvjs

我需要知道何时从Apple tvOS应用程序中弹出文档(屏幕)。我认为检测菜单按钮是最简单的方法,但是我使用的是TVJS并且无法弄清楚如何编写事件处理程序。

请帮我写一个事件处理程序,它将触发文档删除,按下菜单按钮或提供替代解决方案。

2 个答案:

答案 0 :(得分:1)

订阅活动unload - 每当页面从堆栈弹出后消失,它就会被触发:

doc.addEventListener("unload", Presenter.onUnload.bind(Presenter));

[...]

onUnload: function(event) {
   console.log("onUnload");
},

答案 1 :(得分:0)

onDocumentRemoval或类似的处理程序有这样的东西。相反,你可以做的是创建一个全局select处理程序:

doc.addEventListener("select", self.doThing.bind(self));

然后检查触发事件是否来自用于删除堆栈元素的其中一个按钮(假设这些按钮具有名为delete的类:

doThing: function(event){
    var element = event.target;
    if (element.getAttribute("class").contains("delete")){
       //enter code here
    }

编辑1:

我找到possible events the TVMLKit handles(我知道它在Swift / Objective-C中,但事件是相同的):

  

TVElementTypePlay

     
      
  • 已发送一个游戏事件。
  •   
     

TVElementTypeSelect

     
      
  • 已分派了一个选择事件。
  •   
     

TVElementTypeHoldSelect

     
      
  • 已发送暂停事件。
  •   
     

TVElementTypeHighlight

     
      
  • 已发送突出显示事件。
  •   
     

TVElementTypeChange

     
      
  • 已发送更改事件。
  •   

只要我可以测试,这些事件只能附加到模板上。我猜测change事件是完美的,如果我可以将它附加到navigationDocument来听取更改,但这两个选项不会起作用并且都会引发错误:

附在全球:

navigationDocument.addEventListener("change", function(event){console.log(event)});

附加到文档数组:

navigationDocument.documents.addEventListener("change", function(event){console.log(event)});

上述方法没有内置方法可以监听任何更改。但是,该事件将适用于侦听内部更改的模板。但是当模板从堆栈pushedpopped时,它就不会被激活。

我猜您需要重新设计您的应用才能实现您的目标。