我已按照本教程进行操作,一切正常。我遇到的唯一问题是我不知道如何检测何时按下按钮?
提前致谢
本教程的作者在这里,向基于 TVML 的应用程序添加交互性的方法是在有问题的 DOM 元素上使用 addEventListener。您可以通过在创建过程中保持对 DOM 元素的引用,或者使用 getElementById 或其他类似的 JavaScript DOM 技术来查找 DOM 元素。另外,我应该提到我已经在提到的教程中添加了一个“第 2 部分”,其中包括这个作为它的主要焦点。
这是一个在 JS 中如何执行此操作的示例,假设 myDOMElement 是一个将您的按钮作为 DOM 元素引用的变量。
myDOMElement.addEventListener("select", function() { alert("CLICK!") }, false);
当然,我有更多关于教程的信息,所以也可以随时查看。
按钮按下类似于 UITouch 事件。查看 UIResponder 标头中的 UIPresEvent 回调。UIViewControllers 是响应者链的一部分,因此您可以在视图控制器中添加回调,如下所示:
- (void)pressesEnded:(NSSet<UIPress *> *)presses withEvent:(nullable UIPressesEvent *)event {
UIPress *anyPress = [presses anyObject];
// handle press event
}
let playPauseRecognizer = UITapGestureRecognizer(target: self, action: "playPauseRecognizer:")
playPauseRecognizer.allowedPressTypes = [NSNumber(integer:UIPressType.PlayPause.rawValue)]
view.addGestureRecognizer(playPauseRecognizer)
您不应该在 tvOS 上使用“UIControlEvents.TouchUpInside”,因为这不会达到您的预期:您可能想改用“UIControlEvents.PrimaryActionTriggered”。
TouchUpInside 由实际触摸触发,这并不是您真正想要的:如果您希望按下遥控器上的 Select 按钮来触发您的按钮,您应该使用 PrimaryActionTriggered。
根据Apple Docs ,您可以向与 iOS 相同的 UIButton 添加操作
UIButton 类的一个实例在触摸屏上实现一个按钮。按钮拦截触摸事件并在点击时向目标对象发送操作消息。设置目标和动作的方法继承自 UIControl。此类提供设置按钮的标题、图像和其他外观属性的方法。通过使用这些访问器,您可以为每个按钮状态指定不同的外观。
Swift 3 版本的@jess-bowers 代码:
override func pressesEnded(_ presses: Set<UIPress>, with event: UIPressesEvent?) {
let anyPress: UIPress? = presses.first
}