1

我正在尝试使用UIControlEventTouchDown简单的事件调用操作,该事件位于(用 推动)UIButton的左下角 。UIViewControllerUINavigationController

我创建了故事板来推动带有按钮的视图控制器。

故事板

并为按钮添加操作以跟踪触摸事件。

- (IBAction)touchUpInside:(id)sender {
    NSLog(@"touchUpInside");
}

- (IBAction)touchDown:(id)sender {
    NSLog(@"touchDown");
}

并且还添加了 touchesBegan 来跟踪它是否被调用。

- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event {
    [self touchesBegan:touches withEvent:event];
    NSLog(@"touchesBegan");
}

现在,通过这样的设置,我有奇怪的行为。左侧(宽度 = 13)和左下方(宽度 = 50,高度 = 50)有一些触摸区域对触摸的响应不同。如果您将触摸这些区域 -touchesBegan 不会像正常行为那样被调用。但它只会在修饰后被调用。

接触区

我相信 UINavigationControler 中使用左侧区域用于推送 UIViewController 的交互式弹出。所以这里有两个问题。

  1. 左下角的负责区域是哪个功能?
  2. 如何以及在何处更改行为以将触摸事件传递给 UIButton(例如,如果我希望 UIButton 响应长触摸事件,当我按下“红色”区域时)?
4

1 回答 1

2

我遇到了同样的问题,我通过禁用iOS 7 中引入的“滑动返回”(在 UIKit 中技术上称为“交互式弹出手势”)功能来修复它。

禁用交互式弹出手势的示例代码:

if ([self.navigationController respondsToSelector:@selector(interactivePopGestureRecognizer)]) {
    self.navigationController.interactivePopGestureRecognizer.enabled = NO;
}

我相信这是由于交互式弹出手势识别器在屏幕左边缘附近消耗/延迟触摸事件(因为从左边缘开始滑动返回),从而导致触摸事件无法传递到控件位于视图的左边缘附近。

于 2014-09-04T05:43:45.660 回答