如何在tvOS中添加检测按钮按下的功能?

5

我遵循了这个教程,一切都运作良好。唯一的问题是我不知道如何检测按钮被按下的情况?

提前感谢。


你有阅读过这份文档吗? - Daniel Storm
是的@DanielStorm,我现在有一个pressesEnded函数,由于某些原因从未被调用。 - Alex Chesters
6个回答

6

我是这篇教程的作者,将互动性添加到基于TVML的应用程序的方法是在相关的DOM元素上使用addEventListener方法。您可以通过在创建期间保持对该元素的引用或使用getElementById或其他类似JavaScript DOM技术来查找DOM元素。此外,我应该提到,在提到的教程中,我添加了一个“Part 2”,重点介绍了这一点。

以下是JS示例,假设myDOMElement是一个变量,它引用您的按钮作为DOM元素:

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

当然,我还有更多关于该教程的信息,所以请随意查看


1
谢谢 @jameson!完美地运行了,也感谢你的教程 :-) - Alex Chesters
我看到的模板没有它,但你绝对可以添加一个事件监听器来检测播放/暂停按钮被按下。 - Nick
你好,如果我的文档有两个按钮,确认和取消,我应该如何检测到其中一个被点击?我是JS新手。 - Wingzero

2
let playPauseRecognizer = UITapGestureRecognizer(target: self, action: "playPauseRecognizer:")
playPauseRecognizer.allowedPressTypes = [NSNumber(integer:UIPressType.PlayPause.rawValue)]

     view.addGestureRecognizer(playPauseRecognizer)

2

按钮按下事件类似于UITouch事件。请查看UIResponder头文件中的UIPressEvent回调函数。UIViewController是响应者链的一部分,因此您可以在视图控制器中添加类似于以下内容的回调函数:

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

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

}

谢谢!我现在有一个函数没有被调用,你知道为什么吗? - Alex Chesters
override func pressesBegan(presses: Set<UIPress>, withEvent event: UIPressesEvent?) { let press = UIPress() abort() } - Alex Chesters
我正在尝试使用该方法处理tvOS上UIButton的触摸,但它不起作用。由于我正在使用UIPressEventSelect选择按钮,它不应该拦截按钮的触摸吗? - coernel

1

在tvOS中,您不应该使用“UIControlEvents.TouchUpInside”,因为它并不像您期望的那样工作:您可能希望改用“UIControlEvents.PrimaryActionTriggered”。

TouchUpInside由实际触摸触发,这并不是您想要的:如果您想让遥控器上的选择按钮按下时触发您的按钮,则应使用PrimaryActionTriggered。


0

您可以像iOS一样为UIButton添加操作,根据Apple Docs

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


0

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

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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接