我正在为tvOS编写一个应用程序 - 这一切都有效,直到我在屏幕上放置了UIButton。添加按钮时,问题是touchesBegan和touchesMoved停止工作。如果我删除按钮然后touchesBegan和touchesMoved再次开始正常工作。为了实验的目的,我尝试取消选中“启用用户交互” - 但这没有任何区别。我也尝试了子类化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];
}
可悲的是,这似乎也不起作用。有没有人对我接下来会尝试什么有任何建议?
答案 0 :(得分:0)
根据this answer,按钮变为焦点视图,并且可以获得所有触摸。您必须使您的视图(在其中实现touchesBegan
和touchesMoved
)具有可关注性。
答案 1 :(得分:0)
如果使用了焦点引擎(例如,当您在屏幕上有UITabbarController
或任何UIButton
时),确实不再调用诸如touchesBegan: withEvent:
之类的触摸事件。如果确实需要它们,则必须首先通过覆盖其只读属性canBecomeFocused
使视图可聚焦:
- (BOOL)canBecomeFocused {
return YES;
}
现在可以将焦点移至您的视图,并且只要焦点对准即可触发触摸事件。但是,当焦点移到屏幕上的其他可聚焦项时,焦点可能会立即再次失去。
为防止这种情况,请在您的视图中实施:
- (BOOL)shouldUpdateFocusInContext:(UIFocusUpdateContext *)context {
return NO;
}
现在,您的视图将不再失去焦点。这也意味着用户无法再访问屏幕上的其他可聚焦项目,因此您可能需要实现逻辑来允许用户再次离开,例如按下按钮。