屏幕左/左下角的UINavigationController和触摸事件

时间:2013-11-08 19:53:15

标签: ios objective-c cocoa-touch events uinavigationcontroller

我尝试使用UIControlEventTouchDown事件调用针对简单UIButton的操作,该UIViewController位于UINavigationController的左下角(使用- (IBAction)touchUpInside:(id)sender { NSLog(@"touchUpInside"); } - (IBAction)touchDown:(id)sender { NSLog(@"touchDown"); } 推送)。

我创建了故事板,用按钮按下视图控制器。

storyboard

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

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

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

{{1}}

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

touchareas

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

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

1 个答案:

答案 0 :(得分:2)

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

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

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

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