设置navigationController.interactivePopGestureRecognizer.delegate = self;

时间:2016-08-22 15:03:58

标签: ios objective-c uinavigationcontroller

正如标题所说。我有一个控制器,我设置interactivePopGestureRecognizer.delegate来处理逻辑何时允许后滑动手势,何时不允许。有效。但是现在我注意到,一旦我设置了委托,后面的滑动就会停止工作。它确实导致了一行代码。但为什么呢?

是的,我用来处理反向扫描逻辑的控制器有所需的一切(UIGestureRecognizerDelegate protocolgestureRecognizerShouldBegin delegate方法,返回YES),但正如我所说,我在另一个控制器中发现只是通过调用以下代码的一行,后面的滑动不再起作用。 (是的,另一个控制器符合UIGestureRecognizerDelegate协议)

self.navigationController.interactivePopGestureRecognizer.delegate = self;

如果我同时添加它也没有帮助:

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

self.navigationController.interactivePopGestureRecognizer.enabled = YES;

我想知道造成这种情况的原因是什么?如果我不打电话给那一行代码,那么回扫一下就行了!它甚至可以在另一个控制器中工作,我在那里处理逻辑。

编辑:我是从viewDidLoad设置委托。我也尝试过viewDidAppear,但没有。

2 个答案:

答案 0 :(得分:1)

问题是因为您将多个ViewController设置为委托。将ViewController设置为UIGestureRecognizerDelegate委托后,ViewController负责处理手势,之前设置的任何委托都将无效

要解决此问题,您可以在viewWillAppear

中显示视图时再次设置委托
self.navigationController.interactivePopGestureRecognizer.delegate = self;

答案 1 :(得分:1)

出于某种原因,如果我将以下代码添加到控制器,则再次向后滑动有效。也许是因为我在控制器视图中有滚动视图,但它甚至在没有以下代码之前工作,然后停止了。奇怪。 (可能是我没有在控制器上工作的tableview,我不记得了,但是当它停止工作时我甚至用隐藏的表来尝试它)

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

如上所述here