我遵循了这个教程,一切都运作良好。唯一的问题是我不知道如何检测按钮被按下的情况?
提前感谢。
我是这篇教程的作者,将互动性添加到基于TVML的应用程序的方法是在相关的DOM元素上使用addEventListener方法。您可以通过在创建期间保持对该元素的引用或使用getElementById或其他类似JavaScript DOM技术来查找DOM元素。此外,我应该提到,在提到的教程中,我添加了一个“Part 2”,重点介绍了这一点。
以下是JS示例,假设myDOMElement是一个变量,它引用您的按钮作为DOM元素:
myDOMElement.addEventListener("select", function() { alert("CLICK!") }, false);
当然,我还有更多关于该教程的信息,所以请随意查看。
let playPauseRecognizer = UITapGestureRecognizer(target: self, action: "playPauseRecognizer:")
playPauseRecognizer.allowedPressTypes = [NSNumber(integer:UIPressType.PlayPause.rawValue)]
view.addGestureRecognizer(playPauseRecognizer)
按钮按下事件类似于UITouch事件。请查看UIResponder头文件中的UIPressEvent回调函数。UIViewController是响应者链的一部分,因此您可以在视图控制器中添加类似于以下内容的回调函数:
- (void)pressesEnded:(NSSet<UIPress *> *)presses withEvent:(nullable UIPressesEvent *)event {
UIPress *anyPress = [presses anyObject];
// handle press event
}
override func pressesBegan(presses: Set<UIPress>, withEvent event: UIPressesEvent?) { let press = UIPress() abort() }
- Alex Chesters在tvOS中,您不应该使用“UIControlEvents.TouchUpInside”,因为它并不像您期望的那样工作:您可能希望改用“UIControlEvents.PrimaryActionTriggered”。
TouchUpInside由实际触摸触发,这并不是您想要的:如果您想让遥控器上的选择按钮按下时触发您的按钮,则应使用PrimaryActionTriggered。
您可以像iOS一样为UIButton添加操作,根据Apple Docs。
UIButton类的实例在触摸屏幕上实现了一个按钮。按钮拦截触摸事件并在点击时向目标对象发送操作消息。从UIControl继承设置目标和操作的方法。此类提供了设置按钮的标题、图像和其他外观属性的方法。通过使用这些访问器,您可以为每个按钮状态指定不同的外观。
这是@jess-bowers代码的Swift 3版本:
override func pressesEnded(_ presses: Set<UIPress>, with event: UIPressesEvent?) {
let anyPress: UIPress? = presses.first
}
pressesEnded
函数,由于某些原因从未被调用。 - Alex Chesters