我想我错过了一些非常基本的东西,但我无法按下按钮来正确覆盖.
我试图检测菜单按钮按下,所以我覆盖pressesBegan:
并测试UIPressTypeMenu
.该方法捕获菜单按钮,并执行我的代码,但随后立即跟随应用程序退出.
这是我重写的方法.有谁知道我做错了什么?还有什么我需要覆盖自动菜单退出吗?这几乎就像有两个响应者.同样处理左侧点击和右侧点击.它们被识别,我的代码会被激活,但无论如何焦点都会改变,因为我还没有完全处理这个事件.
我在应用程序的第一个视图控制器中尝试了代码,并且菜单被正确覆盖.然后,我设置一个空白视图并将该视图显示为视图编号2,我无法获取要覆盖的方法.
- (void)pressesBegan:(NSSet<UIPress *> *)presses withEvent:(UIPressesEvent *)event {
for(UIPress *press in presses) {
if(press.type == UIPressTypeMenu) {
[(UIImageView *) [self.view viewWithTag:100] setUserInteractionEnabled:NO];
}
if(press.type == UIPressTypePlayPause) {
// play and pause code
}
}
}
-(void) pressesEnded:(NSSet<UIPress *> *)presses withEvent:(UIPressesEvent *)event {
//
for(UIPress *press in presses) {
if(press.type == UIPressTypeMenu) {
// do ButtonA job
NSLog(@"test");
}
if(press.type == UIPressTypePlayPause) {
// do ButtonX job
} else {
}
}
}
-(void) pressesChanged:(NSSet<UIPress *> *)presses withEvent:(UIPressesEvent *)event {
// Works fine!
for(UIPress *press in presses) {
if(press.type == UIPressTypeMenu) {
// do ButtonA job
}
if(press.type == UIPressTypePlayPause) {
// do ButtonX job
}
}
}
-(void) pressesCancelled:(NSSet<UIPress *> *)presses withEvent:(UIPressesEvent *)event {
// Works fine!
for(UIPress *press in presses) {
if(press.type == UIPressTypeMenu) {
// do ButtonA job
NSLog(@"cancelled");
}
if(press.type == UIPressTypePlayPause) {
// do ButtonX job
}
}
}
Run Code Online (Sandbox Code Playgroud)
该应用程序正在退出,因为您允许pressesEnded:withEvent:
消息返回到响应者链的顶部。您还应该重写该方法,然后执行调用(super
但请注意:如果用户无法使用菜单退出,他们会对您感到非常沮丧)
左箭头和右箭头正在触发焦点变化,因为这些箭头是通过手势识别器处理的,而不是通过pressesBegan
/pressesEnded
方法,因此您的视图是否覆盖这些箭头并不重要。
iOS 事件处理指南提供了有关手势识别器和UIResponder
方法如何相互作用的更多详细信息。