Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

UINavigationController interactivePopGestureRecognizer working abnormal in iOS7

In iOS7, we have a new "swipe left to right" gesture, this is a very useful feature, but now I have a problem with it.

I use this code to custom the back button in UINavigationBar.

self.navigationItem.leftBarButtonItem = [[UIBarButtonItem alloc] initWithCustomView:view];

but this will disables the "swipe left to right" gesture, so I use the follow code to keep the gesture enabled.

self.navigationController.interactivePopGestureRecognizer.delegate = self

And then, I found that the gesture is working abnormal, if current ViewController has a tableView, when the tableView is scrolling, the gesture won't be triggered. Now the gesture can't be triggered easily, is there some way to fix it?

like image 961
Wei Avatar asked Jan 08 '14 09:01

Wei


2 Answers

This code can wroks well for me.

- (BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldRecognizeSimultaneouslyWithGestureRecognizer:(UIGestureRecognizer *)otherGestureRecognizer
{
    return YES;
}

- (BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldBeRequiredToFailByGestureRecognizer:(UIGestureRecognizer *)otherGestureRecognizer
{
    return [gestureRecognizer isKindOfClass:UIScreenEdgePanGestureRecognizer.class];
}
like image 68
Wei Avatar answered Oct 08 '22 02:10

Wei


Setting the interactivePopGestureRecognizer.delegate to self is only the first step. The second step is to implement

func gestureRecognizer(_ gestureRecognizer: UIGestureRecognizer, shouldRecognizeSimultaneouslyWith otherGestureRecognizer: UIGestureRecognizer) -> Bool {
    return !(otherGestureRecognizer is UIPanGestureRecognizer)
}

The test against the pan gesture recognizer is needed to block vertical scrolling of a scroll or table view while the interactive pop is in progress.

like image 45
Ortwin Gentz Avatar answered Oct 08 '22 02:10

Ortwin Gentz