【问题标题】:How to add detect button presses in tvOS?如何在 tvOS 中添加检测按钮按下?
【发布时间】:2015-09-10 13:15:33
【问题描述】:

我已关注此tutorial,一切正常。我遇到的唯一问题是我不知道如何检测何时按下按钮?

提前致谢

【问题讨论】:

  • 你读过documentation吗?
  • 是的@DanielStorm,我现在有一个pressesEnded 函数,它永远不会因为某些原因而被调用

标签: swift apple-tv tvos


【解决方案1】:

本教程的作者,向基于 TVML 的应用程序添加交互性的方法是在相关 DOM 元素上使用 addEventListener。您可以通过在创建过程中保持对 DOM 元素的引用,或者使用 getElementById 或其他类似的 JavaScript DOM 技术来查找 DOM 元素。另外,我应该提到我已经在提到的教程中添加了一个“第 2 部分”,其中包括这个作为它的主要重点。

这是一个示例,说明您如何在 JS 中执行此操作,假设 myDOMElement 是一个将您的按钮作为 DOM 元素引用的变量。

  myDOMElement.addEventListener("select", function() { alert("CLICK!") }, false);

当然,我有更多关于教程的信息,所以也欢迎check that out

【讨论】:

  • 谢谢@jameson!完美运行,也感谢您的教程:-)
  • 我见过的模板没有,但你绝对可以为play添加一个事件监听器来检测播放/暂停按钮被按下。
  • 您好,如果我的文档有两个按钮,确定和取消,我如何检测单击其中一个按钮? JS新手
【解决方案2】:

按钮按下类似于 UITouch 事件。查看 UIResponder 标头中的 UIPresEvent 回调。 UIViewControllers 是响应者链的一部分,所以你可以像这样在你的视图控制器中添加回调:

- (void)pressesEnded:(NSSet<UIPress *> *)presses withEvent:(nullable UIPressesEvent *)event {

    UIPress *anyPress = [presses anyObject];
    // handle press event

}

【讨论】:

  • 谢谢!我现在有这个函数没有被调用,你知道为什么吗?
  • override func pressesBegan(presses: Set&lt;UIPress&gt;, withEvent event: UIPressesEvent?) { let press = UIPress() abort() }
  • 我正在尝试使用该方法处理 tvOS 上的 UIButton 触摸,但它不起作用。它不应该拦截按钮的触摸,因为我正在使用 UIPresEventSelect 选择按钮吗?
【解决方案3】:
let playPauseRecognizer = UITapGestureRecognizer(target: self, action: "playPauseRecognizer:")
playPauseRecognizer.allowedPressTypes = [NSNumber(integer:UIPressType.PlayPause.rawValue)]

     view.addGestureRecognizer(playPauseRecognizer)

【讨论】:

    【解决方案4】:

    您不应该在 tvOS 上使用“UIControlEvents.TouchUpInside”,因为这不会达到您的预期:您可能想改用“UIControlEvents.PrimaryActionTriggered”。

    TouchUpInside 由实际触摸触发,这并不是您真正想要的:如果您希望按下遥控器上的 Select 按钮来触发您的按钮,您应该使用 PrimaryActionTriggered。

    【讨论】:

      【解决方案5】:

      根据Apple DocsApple Docs,您可以将操作添加到与 iOS 相同的 UIButton

      UIButton 类的一个实例实现了一个触摸按钮 屏幕。按钮拦截触摸事件并发送操作消息 点击时指向目标对象。设定目标的方法和方法 动作继承自 UIControl。这个类提供了方法 设置按钮的标题、图像和其他外观属性。 通过使用这些访问器,您可以为 每个按钮的状态。

      【讨论】:

        【解决方案6】:

        Swift 3 版本的@jess-bowers 代码:

        override func pressesEnded(_ presses: Set<UIPress>, with event: UIPressesEvent?) {
            let anyPress: UIPress? = presses.first
        }
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2016-03-23
          • 1970-01-01
          • 2020-03-13
          • 1970-01-01
          • 2017-03-09
          • 1970-01-01
          • 1970-01-01
          • 2022-10-05
          相关资源
          最近更新 更多