简体   繁体   中英

UINavigationController and Touch Events in Left / Left-Bottom Corner of Screen

I'm trying to call action with UIControlEventTouchDown event for simple UIButton which placed in left-bottom corner of UIViewController (which pushed with UINavigationController ).

I created storyboard to push view controller with button.

故事板

And added actions for button to trace touch events.

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

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

And also added touchesBegan to trace if it is called.

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

Now, with such setup, I have strange behaviour. There are some touch areas in left (width =13) and left-bottom (width = 50, height = 50) which respond differently on touches. If you will will make touch over those areas -touchesBegan is not called on touch down, as would be with normal behaviour. But it will be called only after touch up.

touchareas

I believe left area is used in UINavigationControoler for interactive pop of pushed UIViewController. So two questions here.

  1. For which functionality is responsible area in bottom-left?
  2. How and where can I change behaviour to pass touch event to UIButton (for example if I want UIButton to respond on long touch event, when I pressing in "red" area)?

I had this same problem, and I fixed it by disabling the "swipe to go back" (technically called " interactive pop gesture " in UIKit) feature introduced in iOS 7.

Sample code to disable interactive pop gesture:

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

I believe this is due to the interactive pop gesture recognizer consuming/delaying touch events near the left edge of the screen (because a swipe to go back starts from the left edge) and thus causing the touch events to not be delivered to controls that are situated near the left edge of the view.

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM