我正在为tvOS编写一个应用程序,在屏幕上显示UIButton之前,它都能工作。添加按钮时,问题是触摸Began和触摸Moved停止工作。如果我移除按钮,则触摸Began和触摸Moved将重新开始正常工作。为了实验的利益,我试过取消勾选"启用用户交互",但这没有任何区别。我还尝试过对UIButton进行子类化,并添加了以下代码:
- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event {
[super touchesBegan:touches withEvent:event];
[self.nextResponder touchesBegan:touches withEvent:event];
}
- (void)touchesMoved:(NSSet<UITouch *> *)touches withEvent:(UIEvent *)event {
[super touchesMoved:touches withEvent:event];
[self.nextResponder touchesMoved:touches withEvent:event];
}
遗憾的是,这似乎也不起作用。有人对我下一步可能尝试什么有什么建议吗?
根据这个答案,按钮变成了一个焦点视图,它得到了所有的触摸。您必须使您的视图(在其中实现touchesBegan
和touchesMoved
)可聚焦。
如果使用焦点引擎(例如,当屏幕上有UITabbarController
或任何UIButton
时),则实际上不再调用touchesBegan: withEvent:
等触摸事件。如果您真的需要它们,您必须首先通过重写其只读属性canBecomeFocused
:来使视图可聚焦
- (BOOL)canBecomeFocused {
return YES;
}
现在,焦点可以移动到您的视图中,只要焦点在焦点上,就会触发触摸事件。然而,当它移动到屏幕上的其他可聚焦项目时,焦点可能会立即再次丢失。
为了防止这种情况,请在您的视图中实现:
- (BOOL)shouldUpdateFocusInContext:(UIFocusUpdateContext *)context {
return NO;
}
现在,您的视图不能再失去焦点。这也意味着用户无法再访问屏幕上的其他可聚焦项目,因此您可能需要实现允许用户再次离开的逻辑,例如按下按钮。